PTY (虛擬終端機) 會模擬終端機裝置,並具有「伺服器」端 (代表終端機的鍵盤 + 螢幕端,可透過開啟 /dev/misc/ptmx 取得),以及透過呼叫 OpenClient 取得的「用戶端」端。
用戶端 PTY 是透過 OpenClient 呼叫中使用的 id 識別。第一個用戶端 PTY 必須為 0,且只有這個用戶端 PTY 可以建立其他用戶端 PTY、接收事件等。這是控制 PTY。
PROTOCOLS
裝置
定義於 fuchsia.hardware.pty/pty.fidl
複製
要求
| 名稱 | 類型 |
|---|---|
request |
server_end:fuchsia.unknown/Cloneable
|
關閉
終止連線。
呼叫 Close 後,用戶端不得傳送任何其他要求。
伺服器傳送狀態回應後,無論狀態為何,都應關閉連線,且不傳送墓誌銘。
關閉管道的用戶端應在語意上等同於呼叫 Close,但不知道關閉何時完成或其狀態。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
payload |
fuchsia.unknown/Closeable_Close_Result
|
ClrSetFeature
允許在客戶 PTY 使用
清除及/或設定 PTY 功能
要求
| 名稱 | 類型 |
|---|---|
clr |
uint32
|
set |
uint32
|
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Status
|
features |
uint32
|
說明
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
payload |
DeviceDescribeResponse
|
GetWindowSize
取得視窗大小 (以字元格為單位)
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Status
|
size |
WindowSize
|
MakeActive
允許在控制 PTY 上使用
選取接收輸入內容的 Client 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
|
查詢
要求
<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/Status
|
events |
uint32
|
SetWindowSize
允許在 Server 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
|
STRUCTS
WindowSize
定義於 fuchsia.hardware.pty/pty.fidl
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
width |
uint32
|
無預設 | |
height |
uint32
|
無預設 |
資料表
DeviceDescribeResponse resource
定義於 fuchsia.hardware.pty/pty.fidl
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
event |
handle<eventpair>
|
選用事件,可傳輸裝置狀態相關資訊。 您可能會在這個事件中觀察到 DeviceSignal 值。 |
常數
| 名稱 | 值 | 類型 | 說明 |
|---|---|---|---|
| DEVICE_PROTOCOL_NAME | fuchsia.hardware.pty/Device |
String |
舊版通訊協定名稱。請改用產生的可探索通訊協定名稱。 已移除:NEXT
|
| 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
|
版本 |