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 不為零,表示偏移偏移量已位於檔案結尾或之後,且無法讀取任何資料。
  • 如果 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

序數欄位類型說明
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() 輸入路徑讀取這個字元。