fuchsia.hardware.pty

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

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

新增:11

协议

设备

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

克隆

添加:26

请求

名称类型
request server_end:fuchsia.unknown/Cloneable

关闭

终止连接。

调用 Close 后,客户端不得发送任何其他请求。

服务器在发送状态响应后,应关闭连接,无论状态如何,且不发送墓志铭。

关闭通道的客户端端点在语义上应等同于调用 Close,而无需知道关闭何时完成或其状态。

请求

<EMPTY>

响应

名称类型
payload fuchsia.unknown/Closeable_Close_Result

ClrSetFeature

允许在客户端 PTY 上使用

清除和/或设置 PTY 功能

请求

名称类型
clr uint32
set uint32

响应

名称类型
status zx/Result
features uint32

描述

请求

<EMPTY>

响应

名称类型
payload DeviceDescribeResponse

GetWindowSize

获取窗口大小(以字符单元格为单位)

请求

<EMPTY>

响应

名称类型
status zx/Result
size WindowSize

MakeActive

允许在控制 PTY 上执行

选择哪个客户端 PTY 接收输入。 读取操作只会在非活跃 PTY 上阻塞。

请求

名称类型
client_pty_id uint32

响应

名称类型
status zx/Result

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/Result

查询

请求

<EMPTY>

响应

名称类型
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 事件,同时将其清除

请求

<EMPTY>

响应

名称类型
status zx/Result
events uint32

SetWindowSize

允许在服务器 PTY 上使用

设置窗口大小

请求

名称类型
size WindowSize

响应

名称类型
status zx/Result

写入

在跳转偏移量处写入数据。 寻道偏移量会向前移动写入的字节数。 如果文件处于附加模式,则系统会先将跳转偏移量设置为文件末尾,然后执行写入操作,这两个操作在一个原子步骤中完成。

如果跳转偏移量加上 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

STRUCTS

WindowSize

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

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

TABLES

DeviceDescribeResponse 资源

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

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

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

您可能会在此事件中观察到 DeviceSignal 值。

常量

名称值类型说明
DEVICE_PROTOCOL_NAME fuchsia.hardware.pty/Device String

旧版协议名称。请改用生成的可检测协议名称。

已移除:29
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() 输入路径读取字符。

服务

服务

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

名称类型传输
设备 fuchsia.hardware.pty/Device 渠道