PTY (虛擬終端) 會模擬終端機裝置,並顯示「伺服器」側
(代表終端機的鍵盤與螢幕側面,
開啟 /dev/misc/ptmx) 和數字這些階段
呼叫 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 功能
要求
名稱 | 類型 |
---|---|
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>
|
已讀
最多讀數傳回位元組。 跳轉位移會隨著讀取的位元組數向前移動。
不變
- 傳回的
data.length
一律不會大於count
。 - 如果
data.length
小於count
,表示搜尋偏移 已達到此作業的檔案結尾。 - 如果
data.length
為零,但count
不是,表示 跳轉偏移值已等於或超過檔案結尾,且無資料 文字。 - 如果
count
為 0,伺服器應執行所有檢查,確保 讀取權限而不實際讀取任何內容,然後傳回空白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
|
無預設 |
資料表
DevicedescribeResponse 資源
定義於 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 |
啟用功能原始功能時,系統不會產生 ^c、^z 等 OOB 事件。 而會從 read() 輸入路徑讀取字元。 |