IO_GETEVENTS - Linux手册页
Linux程序员手册 第2部分
更新日期: 2020-06-09
名称
io_getevents-从完成队列中读取异步I / O事件
语法
#include <linux/aio_abi.h> /* Defines needed types */ #include <linux/time.h> /* Defines 'struct timespec' */ int io_getevents(io_context_t ctx_id, long min_nr, long nr, struct io_event *events, struct timespec *timeout);
注意:此系统调用没有glibc包装器。请参阅注释。
说明
io_getevents()系统调用尝试从ctx_id指定的AIO上下文的完成队列中读取至少min_nr个事件,最多读取nr个事件。
timeout参数指定等待事件的时间,并以以下形式的结构指定为相对超时:
struct timespec { time_t tv_sec; /* seconds */ long tv_nsec; /* nanoseconds [0 .. 999999999] */ };
指定的时间将四舍五入到系统时钟的粒度,并保证不会提前过期。
将超时指定为NULL意味着无限期地阻塞,直到至少获得min_nr个事件为止。
返回值
成功后,io_getevents()返回读取的事件数。如果超时到期,则可以为0或小于min_nr的值。如果调用被信号处理程序中断,它也可能是一个小于min_nr的非零值。
有关故障返回的信息,请参见"注意"。
错误说明
- EFAULT
- 事件或超时都是无效的指针。
- EINTR
- 被信号处理程序打断;参见signal(7)。
- EINVAL
- ctx_id无效。 min_nr超出范围或nr超出范围。
- ENOSYS
- io_getevents()未在此体系结构上实现。
版本
异步I / O系统调用首先出现在Linux 2.5中。
遵循规范
io_getevents()是特定于Linux的,不应在旨在可移植的程序中使用。
备注
Glibc没有为该系统调用提供包装函数。您可以使用syscall(2)调用它。但是,您可能想使用libaio提供的io_getevents()包装函数。
请注意,libaio包装器函数对ctx_id参数使用其他类型(io_context_t)。还要注意,libaio包装器没有遵循通常的C库约定来指示错误:错误时,它返回一个否定的错误号(ERRORS中列出的值之一的负数)。如果通过syscall(2)调用系统调用,则返回值遵循指示错误的常规约定:-1,而errno设置为指示错误的(正)值。
BUGS
无效的ctx_id可能会导致分段错误,而不是生成错误EINVAL。
另外参见
io_cancel(2),io_destroy(2),io_setup(2),io_submit(2),aio(7),时间(7)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。