io_getevents(2) - Linux 手册页
名称
io_getevents - 从完成队列读取异步 I/O 事件概要
#include <linux/aio_abi.h> /* Defines needed types */#include <linux/time.h> /* Defines 'struct timespec' */int io_getevents(aio_context_t ctx_id, long min_nr, long nr, struct io_event *eventsstruct timespec *" timeout );注意:glibc 没有为该系统调用提供封装函数;请参阅“备注”部分。
描述
io_getevents() 系统调用尝试从由 ctx_id 指定的 AIO 上下文的完成队列读取至少 min_nr 个事件,最多读取 nr 个事件。timeout 参数指定等待事件的时间量,其中 NULL 超时将一直等待,直到看到至少 min_nr 个事件。请注意,timeout 是相对的,如果操作阻塞且不为 NULL,则会被更新。
返回值
成功时,io_getevents() 返回读取的事件数量:如果没有可用事件则返回 0,如果 timeout 已过期则返回小于 min_nr 的值。有关失败返回值,请参阅 NOTES。错误
- EFAULT
- events 或 timeout 是无效指针。
- EINVAL
- ctx_id 无效。min_nr 超出范围或 nr 超出范围。
- EINTR
- 被信号处理程序中断;请参阅 signal(7)。
- ENOSYS
- io_getevents() 在此架构上未实现。
版本
异步 I/O 系统调用首次出现在 Linux 2.5 中。
符合
io_getevents() 是 Linux 特有的,不应在旨在可移植的程序中使用。
说明
Glibc 没有为此系统调用提供包装函数。您可以使用 syscall(2) 调用它。但相反,您可能需要使用 libaio 提供的 io_getevents() 包装函数。请注意,libaio 包装函数使用不同的类型 (io_context_t) 作为 ctx_id 参数。另请注意,libaio 包装函数不遵循 C 库指示错误的常用约定:出错时,它返回一个负的错误编号(错误值之一的负数,如 ERRORS 中列出)。如果通过 syscall(2) 调用系统调用,则返回值遵循指示错误的常用约定:-1,并且 errno 设置为指示错误的(正)值。
错误
无效的 ctx_id 可能会导致段错误,而不是生成 EINVAL 错误。参见
io_cancel(2), io_destroy(2), io_setup(2), io_submit(2), aio(7), time(7)