這說明在 Zircon 中使用的使用者空間公開錯誤組合。第一部分提供每個錯誤代碼的標準名稱和說明。第二部分提供具體值。
核心內發生錯誤通常是 status_t
類型的變數,而錯誤是由 ZX_ERR_CANONICAL_NAME
格式的巨集定義,例如 ZX_ERR_INTERNAL
。所有錯誤情況都是負值,以非負數值表示成功。
在使用者空間中,系統呼叫調派層 (libzircon) 會向 zx_status_t
類型的變數顯示結果值,這類變數目前使用與錯誤核心相同的拼字和值,但錯誤的值會轉換為 0 表示成功,錯誤則是正值。
如需核心內部值的清單,請參閱核心內部錯誤。
說明
每個類別都代表一種錯誤類別。每個類別的第一個錯誤代碼是該類別的通用代碼,會在沒有更具體的程式碼時使用。類別中的其他錯誤代碼 (如果有的話) 代表該類別中的特定錯誤類型。一般來說,請盡可能提供具體的錯誤代碼。
錯誤分為運算、引數、主題和 ID。運算通常是函式或系統呼叫。引數通常是呼叫的參數。作業的主旨是作業執行的主要物件,通常是一個控制代碼,且通常會做為第一個引數傳遞。ID 通常為數字或字串,用來清楚識別作業中使用的資源。
類別
成功
ZX_OK 作業成功。
一般錯誤
這些狀態表示系統在嘗試作業時遇到一般錯誤。
內部 系統在執行作業時遇到不明錯誤。
NOT_SUPPORTED 系統不支援、導入或啟用這項作業。
NO_RESOURCES 系統無法分配作業所需的一些資源。
NO_MEMORY:系統無法分配作業所需的記憶體。
參數錯誤
這些訊息表示呼叫端指定的參數並未指定有效作業,或該參數對指定作業無效。
INVALID_VALUE 引數無效。
WRONG_TYPE 作業主體的類型有誤,無法執行運算作業。 範例:嘗試在執行緒控制代碼上執行 message_read。
BAD_SYSCALL 指定的系統呼叫號碼無效。
BAD_HANDLE 指定的帳號代碼值沒有參照控制代碼。
OUT_OF_RANGE 引數超出這項作業的有效範圍。 注意:如果系統變更狀態,引數可能有效時,就會使用這個引數,與在引數永久有效時使用的 INVALID_COUNTRY 不同。
BUFFER_TOO_SMALL 呼叫端提供的緩衝區太小,無法執行這項作業。
先決條件或狀態錯誤
這些表示作業失敗的原因是不滿足作業的先決條件,或是系統無法在當前狀態下完成作業。
BAD_STATE 系統無法在目前的狀態下執行作業。注意:FAILED_PRECondition 是這個錯誤的保留別名
NOT_FOUND 找不到要求的實體。
TIMED_OUT 作業完成前所經過的時間限制。
ALREADY_EXISTS 已有物件具有指定的 ID。範例:嘗試建立已有名稱相同的檔案。
ALREADY_BOUND 作業失敗,因為該指定實體已由其他實體擁有或控制。 如果目前的擁有者釋出實體,作業之後可能會成功。
HANDLE_CLOSED 正在等候的帳號代碼已關閉。
PEER_CLOSED 作業失敗,因為作業主體的遠端端已關閉。
UNAVAILABLE 作業主體目前無法執行作業。 注意:當呼叫端沒有直接觀察主體可執行作業的時間,且應該重試時,即可使用此項目。
SHOULD_WAIT 作業目前無法執行,但如果呼叫端等待滿足先決條件 (例如等候可讀取或可寫入的控制代碼) 就可能會成功。範例:嘗試從沒有等待訊息、但已開啟遠端遠端的管道讀取時,會傳回 SHOULD_WAIT。嘗試讀取沒有任何等待訊息且遠端端關閉的管道時,系統會傳回 PEER_CLOSED。
權限錯誤
ACCESS_DENIED 呼叫端沒有執行指定作業的權限。
輸入/輸出錯誤
IO,否則 I/O 期間發生不明錯誤。
IO_REFUSED 作業遭拒時執行 I/O 作業的實體。例如:I2C 裝置配置交易或磁碟控制器拒絕無效的指令。
IO_DATA_INTEGRITY:作業中的資料未通過完整性檢查,可能已損毀。例如:CRC 或 Parity 錯誤。
IO_DATA_LOSS:作業中的資料目前無法使用,且可能會永久遺失。例如:磁碟區塊因無法復原而無法復原。