LIO_LISTIO - Linux手册页
Linux程序员手册 第3部分
更新日期: 2020-04-11
名称
lio_listio-启动I / O请求列表
语法
#include <aio.h> int lio_listio(int mode, struct aiocb *const aiocb_list[], int nitems, struct sigevent *sevp); Link with -lrt.
说明
lio_listio()函数启动数组aiocb_list描述的I / O操作列表。
模式操作具有以下值之一:
- LIO_WAIT
- 呼叫将阻塞,直到所有操作完成。 sevp参数将被忽略。
- LIO_NOWAIT
- I / O操作排队等待处理,并且调用立即返回。当所有I / O操作完成时,将按照sevp参数指定的方式进行异步通知;有关详细信息,请参见sigevent(7)。如果sevp为NULL,则不会发生异步通知。
aiocb_list参数是一个指向描述I / O操作的aiocb结构的指针的数组。这些操作以未指定的顺序执行。 nitems参数指定数组aiocb_list的大小。 aiocb_list中的空指针将被忽略。
在aiocb_list中的每个控制块中,aio_lio_opcode字段指定要启动的I / O操作,如下所示:
- LIO_READ
- 启动读取操作。该操作已排队,就像对指定此控制块的aio_read(3)的调用一样。
- LIO_WRITE
- 启动写操作。该操作已排队,就像对指定此控制块的aio_write(3)的调用一样。
- LIO_NOP
- 忽略此控制块。
每个控制块中的其余字段具有与aio_read(3)和aio_write(3)相同的含义。每个控制块的aio_sigevent字段可用于为各个I / O操作指定通知(请参见sigevent(7))。
返回值
如果mode为LIO_NOWAIT,则如果所有I / O操作均已成功排队,则lio_listio()返回0。否则,返回-1,并设置errno表示错误。
如果mode为LIO_WAIT,则在所有I / O操作成功完成后,lio_listio()返回0。否则,返回-1,并设置errno表示错误。
lio_listio()的返回状态仅提供有关调用本身的信息,而不提供有关各个I / O操作的信息。一个或多个I / O操作可能会失败,但这不会阻止其他操作完成。可以使用aio_error(3)确定aiocb_list中各个I / O操作的状态。操作完成后,可以使用aio_return(3)获得其返回状态。单独的I / O操作可能会由于aio_read(3)和aio_write(3)中所述的原因而失败。
错误说明
lio_listio()函数可能由于以下原因而失败:
- EAGAIN
- 资源不足。
- EAGAIN
- Nitems指定的I / O操作数将导致超出限制AIO_MAX。
- EINTR
- 模式为LIO_WAIT,并且在所有I / O操作完成之前捕获了信号;参见signal(7)。 (这甚至可能是用于异步I / O完成通知的信号之一。)
- EINVAL
- 模式无效,或者nitems超过了限制AIO_LISTIO_MAX。
- EIO
- aiocb_list指定的其他一项操作失败。应用程序可以使用aio_return(3)检查每个操作的状态。
如果lio_listio()失败,并显示错误EAGAIN,EINTR或EIO,则可能已启动了aiocb_list中的某些操作。如果lio_listio()由于任何其他原因失败,则没有任何I / O操作已启动。
版本
从glibc 2.1开始,lio_listio()函数可用。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
lio_listio() | Thread safety | MT-Safe |
遵循规范
POSIX.1-2001,POSIX.1-2008。
备注
在使用之前将控制块清零是个好主意。在I / O操作进行期间,不得更改控制块。在操作期间不得访问正在读取或写入的缓冲区,否则可能会发生不确定的结果。涉及的存储区域必须保持有效。
指定相同aiocb结构的同时I / O操作会产生不确定的结果。
另外参见
aio_cancel(3),aio_error(3),aio_fsync(3),aio_return(3),aio_suspend(3),aio_write(3),aio(7)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。