PTY(伪终端)通过“服务器”模拟终端设备侧面
(代表终端的键盘和显示器端,可从
打开 /dev/misc/ptmx)和许多“client”获得的边长
调用 OpenClient
。
客户端 PTY 由 OpenClient
调用中使用的 id
标识。通过
第一个客户端 PTY 必须为 0,并且是唯一允许的客户端 PTY
创建其他客户端 PTY、接收事件等。
正在控制 PTY。
PROTOCOLS
设备
在 fuchsia.hardware.pty/pty.fidl 中定义
Clone2
请求
名称 | 类型 |
---|---|
request |
server_end<fuchsia.unknown/Cloneable>
|
关闭
终止连接。
调用 Close
后,客户端不得发送任何其他请求。
服务器在发送状态响应后,应关闭连接 无论状态如何,都不会发送摘要。
关闭通道的客户端应该在语义上等效
调用 Close
,但不知道关闭何时完成或其
状态。
请求
<空>
响应
名称 | 类型 |
---|---|
payload |
fuchsia.unknown/Closeable_Close_Result
|
ClrSetFeature
允许在客户端 PTY 上使用
清除和/或设置 PTY 功能
请求
名称 | 类型 |
---|---|
clr |
uint32
|
set |
uint32
|
响应
名称 | 类型 |
---|---|
status |
zx/Status
|
features |
uint32
|
描述
请求
<空>
响应
名称 | 类型 |
---|---|
payload |
DeviceDescribeResponse
|
GetWindowSize
获取窗口大小(以字符单元格为单位)
请求
<空>
响应
名称 | 类型 |
---|---|
status |
zx/Status
|
size |
WindowSize
|
MakeActive
允许在控制 PTY 上
选择接收输入的客户端 PTY。 读取操作只是在非活跃 PTY 上阻塞。
请求
名称 | 类型 |
---|---|
client_pty_id |
uint32
|
响应
名称 | 类型 |
---|---|
status |
zx/Status
|
OpenClient
打开具有唯一 id
的客户端 PTY 设备。client
应为句柄
(成功时)将变为开放通道的通道的一个端点。
连接到新创建的设备如果失败,频道将
已关闭。关闭通道将关闭连接并释放
设备。如果提供的 id
为 0,则新客户端是控制
并能够打开其他客户端。如果
当前设备不是控制客户端,ZX_ERR_ACCESS_DENIED
将是
返回。如果 id
不具有唯一性,则返回 ZX_ERR_INVALID_ARGS
。
否则,系统会传递来自 device_add
的状态代码。
请求
名称 | 类型 |
---|---|
id |
uint32
|
client |
server_end<Device>
|
响应
名称 | 类型 |
---|---|
s |
zx/Status
|
查询
请求
<空>
响应
名称 | 类型 |
---|---|
protocol |
vector<uint8>
|
已读
读取到“count”寻道偏移量处的字节。 寻道偏移量向前移动读取的字节数。
不变量
- 返回的
data.length
绝不会大于count
。 - 如果
data.length
小于count
,则表示跳转偏移量 到达文件末尾。 - 如果
data.length
为零,count
不为零,则表示 跳转偏移量已到达或超出文件末尾,且任何数据都不能 以供读取。 - 如果
count
为零,服务器应执行所有检查,以确保 读取权限,而不实际读取任何内容,并将data
矢量。
此方法需要 Rights.READ_BYTES 权限。
如果 count
大于 MAX_TRANSFER_SIZE
,则返回 ZX_ERR_OUT_OF_RANGE
。
请求
名称 | 类型 |
---|---|
count |
uint64
|
响应
名称 | 类型 |
---|---|
payload |
fuchsia.io/Readable_Read_Result
|
ReadEvents
返回待处理的 OOB 事件,同时清除这些事件
请求
<空>
响应
名称 | 类型 |
---|---|
status |
zx/Status
|
events |
uint32
|
SetWindowSize
允许在服务器 PTY 上运行
设置窗口大小
请求
名称 | 类型 |
---|---|
size |
WindowSize
|
响应
名称 | 类型 |
---|---|
status |
zx/Status
|
写入
在跳转偏移量处写入数据。 寻道偏移量向前移动写入的字节数。 如果文件处于附加模式,则首先将跳转偏移量设置为末尾 然后写入文件
如果定位偏移量加上 data.length
超出,则文件大小可能会增加
当前文件末尾。
- 请求
data
字节缓冲区以写入文件。
- 响应
actual_count
表示写入的字节数。
不变量
- 返回的
actual_count
绝不会大于data.length
。 - 如果服务器因某些原因而无法写入所有数据,不够
空格,
actual_count
可以小于data.length
。如果没有字节 则会返回错误。 - 如果
data.length
为零,则服务器应执行所有检查 确保在不更改文件的情况下拥有写入权限,并返回 零字节的成功写入。如果存在以下情况,定位偏移量仍会更新: 。
此方法需要 Rights.WRITE_BYTES 权限。
请求
名称 | 类型 |
---|---|
data |
fuchsia.io/Transfer
|
响应
名称 | 类型 |
---|---|
payload |
fuchsia.io/Writable_Write_Result
|
结构体
WindowSize
在 fuchsia.hardware.pty/pty.fidl 中定义
字段 | 类型 | 说明 | 默认 |
---|---|---|---|
width |
uint32
|
无默认设置 | |
height |
uint32
|
无默认设置 |
表
DeviceDedocumentResponse 资源
在 fuchsia.hardware.pty/pty.fidl 中定义
Ordinal | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
event |
handle<eventpair>
|
可选事件,可传输有关设备状态的信息。 可以在此事件中观察到 DeviceSignal 值。 |
常量
名称 | 值 | 类型 | 说明 |
---|---|---|---|
DEVICE_PROTOCOL_NAME | fuchsia.hardware.pty/Device |
String |
|
EVENT_HANGUP |
1
|
uint32 |
终端没有活跃的客户端。 |
EVENT_INTERRUPT |
2
|
uint32 |
终端收到了 ^C 控制字符。 |
EVENT_MASK |
15
|
uint32 |
所有活动 |
EVENT_SUSPEND |
4
|
uint32 |
终端收到了一个 ^Z 控制字符。 |
EVENT_WINDOW_SIZE |
8
|
uint32 |
终端窗口的大小已调整。 |
FEATURE_RAW |
1
|
uint32 |
启用 Feature Raw 时,不会生成 ^c、^z 等 OOB 事件。 而是从 read() 输入路径读取该字符。 |