IO_GETEVENTS - Linux手册页

时间:2019-08-20 17:58:53  来源:igfitidea点击:

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/