fuchsia.hardware.pty

PTY(伪终端)可模拟终端设备,其中“服务器”端(代表终端的键盘和显示器端,通过打开 /dev/misc/ptmx 来获取)和多个“客户端”端(这些端通过调用 OpenClient 获得)。

客户端 PTY 由 OpenClient 调用中使用的 id 进行标识。第一个客户端 PTY 必须为 0,并且是唯一一个可以创建其他客户端 PTY、接收事件等的客户端 PTY。它是控制 PTY。

添加数量:11

协议

设备

fuchsia.hardware.pty/pty.fidl 中定义

克隆 2

请求

名称类型
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

激活

可在控制 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 不为 0,则表示跳转偏移量已位于或超出文件末尾,且无法读取任何数据。
  • 如果 count 为零,服务器应执行所有检查以确保能够在不实际读取任何内容的情况下进行读取,并返回空的 data 矢量。

此方法需要右侧的 Rights.READ_BYTES

如果 count 大于 MAX_TRANSFER_SIZE,则返回 ZX_ERR_OUT_OF_RANGE

请求

名称类型
count uint64

回复

名称类型
payload fuchsia.io/Readable_Read_Result

读取事件

返回待处理的 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

结构

窗口大小

fuchsia.hardware.pty/pty.fidl 中定义

字段类型说明默认
width uint32 无默认值
height uint32 无默认值

表格

DeviceDescribeResponse 资源

fuchsia.hardware.pty/pty.fidl 中定义

序数字段类型说明
event handle<eventpair>

用于传输与设备状态有关的信息的可选事件。

可以在此事件中观察到 DeviceSignal 值。

常量

名称类型说明
DEVICE_PROTOCOL_NAME fuchsia.hardware.pty/Device String
活动通话 1 uint32

终端没有活跃客户端。

事件中断 2 uint32

终端收到了 ^C 控制字符。

活动面具 15 uint32

所有活动

EVENT_SUSPEND 4 uint32

终端收到了 ^Z 控制字符。

事件窗口大小 8 uint32

终端窗口的大小已调整。

FEATURE_RAW 1 uint32

启用 Feature RAW 后,系统不会生成 ^c、^z 等 OOB 事件。 而是从 read() 输入路径中读取字符。