PTY (虛擬終端機) 會模擬終端裝置,「伺服器」的一側代表終端機的鍵盤 + 螢幕側,並透過開啟 /dev/misc/ptmx 取得多個「用戶端」端。呼叫 OpenClient
即可取得用戶端裝置。
用戶端 PTY 是以 OpenClient
呼叫中使用的 id
來識別。第一個用戶端 PTY 必須為 0,而且是唯一可以建立其他用戶端 PTY、接收事件等的用戶端 PTY。控制權杖是唯一可以建立的用戶端 PTY。
專家
裝置
定義於 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
不為零,表示偏移偏移量已位於檔案結尾或之後,且無法讀取任何資料。 - 如果
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
|
設定視窗大小
允許在伺服器 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
|
無預設 |
資料表
Device 說明回應資源
定義於 fuchsia.hardware.pty/pty.fidl
序數 | 欄位 | 類型 | 說明 |
---|---|---|---|
1 |
event |
handle<eventpair>
|
可傳送裝置狀態相關資訊的選用事件。 系統可能會在這個事件中觀察 DeviceSignal 值。 |
場景
名稱 | 值 | 類型 | 說明 |
---|---|---|---|
裝置_PROTOCOL_NAME | fuchsia.hardware.pty/Device |
String |
|
活動 |
1
|
uint32 |
終端機沒有作用中的用戶端。 |
事件 |
2
|
uint32 |
終端機收到 ^C 控製字元。 |
事件 |
15
|
uint32 |
所有活動 |
活動驚喜 |
4
|
uint32 |
終端機收到 ^Z 控製字元。 |
EVENT_WINDOW_SIZE |
8
|
uint32 |
終端機視窗已調整大小。 |
精選圖片 |
1
|
uint32 |
啟用功能原始物件後,系統不會產生 ^c、^z 等 OOB 事件。 而是從 read() 輸入路徑讀取這個字元。 |