錯誤

這說明在 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:作業中的資料目前無法使用,且可能會永久遺失。例如:磁碟區塊因無法復原而無法復原。