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
eventstimeout 是无效指针。
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)