通用错误码

通用错误码

EAGAIN (即 EWOULDBLOCK)

由于设备状态不允许执行,ioctl 无法处理。例如,当设备处于休眠状态且执行 ioctl 以查询统计信息时,可能会发生这种情况。当 ioctl 需要等待事件但设备以非阻塞模式打开时,也会返回此错误。

EBADF

文件描述符无效。

EBUSY

由于设备正忙,ioctl 无法处理。这通常发生在设备正在流式传输时,并且 ioctl 试图更改会影响流的内容,或者需要使用已分配的硬件资源。在未先执行其他操作以解决问题(通常是:在重试之前停止流)的情况下,不得重试该 ioctl。

EFAULT

从/向用户空间复制数据时发生故障,可能是由无效指针引用引起的。

EINVAL

一个或多个 ioctl 参数无效或超出允许范围。这是一个广泛使用的错误码。有关具体原因,请参阅各个 ioctl 请求的描述。

ENODEV

设备未找到或已被移除。

ENOMEM

没有足够的内存来处理所需的操作。

ENOTTY

文件描述符不支持此 ioctl。

ENOSPC

在 USB 设备上,流式 ioctl 可能会返回此错误,这意味着此请求将超出为周期性传输保留的 USB 带宽(高达 USB 带宽的 80%)。

EPERM

权限被拒绝。如果设备需要写入权限,或需要某些特殊能力(例如 root 权限),则可能返回此错误。

EIO

I/O 错误。通常在与硬件设备通信出现问题时使用。这可能表明硬件损坏或不稳定。这是一种“出错了,我放弃!”的错误类型。

ENXIO

不存在与此设备特殊文件对应的设备。

注意

  1. 此列表并非详尽无遗;ioctl 可能会返回其他错误码。由于错误可能产生副作用,例如驱动程序重置,因此应用程序应在遇到意外错误时中止,或者假定设备处于不良状态。

  2. 请求特定的错误码列在各个请求的描述中。