错误码


英文原文快照


本篇描述了Zircon用户空间返回的错误集。第一部分提供每个错误代码的规范名称和描述。第二部分描述了错误代码的具体含义。

在内核里错误变量抑或函数返回是status_t类型,错误使用ZX_ERR_CANONICAL_NAME形式宏定义,如:ZX_ERR_INTERNAL错误类型。所有错误情况为负值,成功情况为非负值。

在用户空间分派调度层(libzircon)错误以zx_status_t类型变量提供给用户使用,错误类型和内核空间拼写一致,不同于内核空间的是用户空间成功情况为0,失败情况为负值。

查看内核错误列表。

说明

每个类别代表一类错误。每个类别中的第一个错误码是该类型的一般错误码,当没有特殊错误时就会返回此错误码。类别中的特殊错误码(如果返回)代表特定错误发生。通常,在可能的情况下,优选更具体的错误代码。

错误码描述操作、参数、主题和标识符的错误。操作通常指系统调用。参数通常指函数变量。操作主题通常指系统调用的主要对象,通常句柄作为作为第一个参数传递。标识符通常是用于明确标识操作中使用的资源的数字或字符串。

分类

成功

ZX_OK 操作成功。

一般错误

这些表示系统在尝试操作时遇到一般错误。

INTERNAL 系统在执行操作时遇到其他未指定的错误。

NOT_SUPPORTED 不支持,不能启用或未实现。

NO_RESOURCES 系统无法分配操作所需的一些资源。

NO_MEMORY 系统无法分配操作所需的内存。

参数错误

这些表示调用者指定的参数没有对应有效操作或对操作无效。

INVALID_ARGUMENT 参数无效。

WRONG_TYPE 执行操作的主题类型错误。如在线程句柄上尝试使用 message_read 操作。

BAD_SYSCALL 指定的系统调用号无效。

BAD_HANDLE 指定的句柄不是真正句柄。

OUT_OF_RANGE 参数超出操作可用范围。

注意:如果参数在系统状态修改后有效,则使用此错误类型;如果参数自始至终都无效,则使用INVALID_ARGUMENT错误类型。

BUFFER_TOO_SMALL 调用者提供的缓存空间太小而不能执行操作。

前提条件和错误状态

当不满足前提条件时操作就不能成功,在当前状态下系统不能正常完成全部操作。

BAD_STATE 在当前状态下系统不能执行操作。

注意:FAILED_PRECONDITION 是预留的BAD_STATE的别名。

NOT_FOUND 未找到操作的实体。

TIMED_OUT 未在规定时间内完成操作。

ALREADY_EXISTS 给定的标识符已存在。例如:试图用一个已存在的文件名创建一个文件。

ALREADY_BOUND 已有实例被其他实例占用或控制而导致操作失败。如果其他实例释放占用或控制操作还会成功执行。

HANDLE_CLOSED 一个句柄在关闭后继续执行写操作。

REMOTE_CLOSED 因为远端关闭操作主题而导致操作失败。

UNAVAILABLE 当前操作主题不能成功执行。

注意:如果无法直接获取到主题何时能操作成功并因此重试,则使用此错误类型。

SHOULD_WAIT 当前无法执行操作,但如果调用者等待满足先决条件,则可能会成功,例如等待句柄可读或可写。例如:尝试从一个空的channel里读取消息,则会返回SHOULD_WAIT;尝试从一个空的channel里读取消息,并且远端已经关闭,则会返回REMOTE_CLOSED

权限错误

ACCESS_DENIED 调用者没有权限执行指定操作。

输入输出错误

IO 读写过程中发生未知错误。

IO_REFUSED 操作IO实例时被拒绝。例如:I2C设备发送一个无回应信号NAK;磁盘控制器拒绝无效命令。

IO_DATA_INTEGRITY 数据不完整或被破坏导致检查失败。例如:CRC或奇偶校验错误。

IO_DATA_LOSS 数据不可获得,或永久丢失。例如:磁盘块被永久损坏。