|LIO_LISTIO(3)||Linux Programmer's Manual||LIO_LISTIO(3)|
int lio_listio(int mode, struct aiocb *restrict const aiocb_list[restrict], int nitems, struct sigevent *restrict sevp);
Link with -lrt.
The mode operation has one of the following values:
- The call blocks until all operations are complete. The sevp argument is ignored.
- The I/O operations are queued for processing and the call returns immediately. When all of the I/O operations complete, asynchronous notification occurs, as specified by the sevp argument; see sigevent(7) for details. If sevp is NULL, no asynchronous notification occurs.
The aiocb_list argument is an array of pointers to aiocb structures that describe I/O operations. These operations are executed in an unspecified order. The nitems argument specifies the size of the array aiocb_list. Null pointers in aiocb_list are ignored.
In each control block in aiocb_list, the aio_lio_opcode field specifies the I/O operation to be initiated, as follows:
- Initiate a read operation. The operation is queued as for a call to aio_read(3) specifying this control block.
- Initiate a write operation. The operation is queued as for a call to aio_write(3) specifying this control block.
- Ignore this control block.
The remaining fields in each control block have the same meanings as for aio_read(3) and aio_write(3). The aio_sigevent fields of each control block can be used to specify notifications for the individual I/O operations (see sigevent(7)).
If mode is LIO_WAIT, lio_listio() returns 0 when all of the I/O operations have completed successfully. Otherwise, -1 is returned, and errno is set to indicate the error.
The return status from lio_listio() provides information only about the call itself, not about the individual I/O operations. One or more of the I/O operations may fail, but this does not prevent other operations completing. The status of individual I/O operations in aiocb_list can be determined using aio_error(3). When an operation has completed, its return status can be obtained using aio_return(3). Individual I/O operations can fail for the reasons described in aio_read(3) and aio_write(3).
- Out of resources.
- The number of I/O operations specified by nitems would cause the limit AIO_MAX to be exceeded.
- mode was LIO_WAIT and a signal was caught before all I/O operations completed; see signal(7). (This may even be one of the signals used for asynchronous I/O completion notification.)
- mode is invalid, or nitems exceeds the limit AIO_LISTIO_MAX.
- One of more of the operations specified by aiocb_list failed. The application can check the status of each operation using aio_return(3).
If lio_listio() fails with the error EAGAIN, EINTR, or EIO, then some of the operations in aiocb_list may have been initiated. If lio_listio() fails for any other reason, then none of the I/O operations has been initiated.
|lio_listio ()||Thread safety||MT-Safe|
Simultaneous I/O operations specifying the same aiocb structure produce undefined results.