Initiate a list of I/O requests
#include <aio.h>
int lio_listio( int mode,
struct aiocb* const list[],
int nent,
struct sigevent* sig );
int lio_listio64( int mode,
struct aiocb64* const list[],
int nent,
struct sigevent* sig );
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
The lio_listio() and lio_listio64() functions let the calling process, lightweight process (LWP), or thread initiate a list of I/O requests within a single function call. The lio_listio64() function is a large-file support version of lio_listio().
The aio_lio_opcode field of each aiocb structure in list specifies the operation to be performed (see <aio.h>):
If mode is LIO_NOWAIT, lio_listio() and lio_listio64() use the sigevent structure pointed to by sig to define both the signal to be generated and how the calling process is notified when the I/O operations are complete:
For regular files, no data transfer occurs past the offset maximum established in the open file description associated with aiocbp->aio_fildes.
The behavior of this function is altered according to the definitions of synchronized I/O data integrity completion and synchronized I/O file integrity completion if synchronized I/O is enabled on the file associated with aio_fildes. (see the definitions of O_DSYNC and O_SYNC in the description of fcntl().)
If the mode argument is LIO_NOWAIT, and the I/O operations are successfully queued, these functions return 0; otherwise they return -1 and set errno.
If the mode argument is LIO_WAIT, and all the indicated I/O has been completed successfully, these functions return 0; otherwise, they return -1 and set errno.
In either case, the return value indicates only the success or failure of the lio_listio() call itself, not the status of the individual I/O requests. In some cases, one or more of the I/O requests contained in the list may fail. Failure of an individual request doesn't prevent completion of any other individual request. To determine the outcome of each I/O request, examine the error status associated with each aiocb control block. Each error status so returned is identical to that returned as a result of calling aio_read() or aio_write().
The number of entries, nent, exceeds the system-wide limit, _POSIX_AIO_MAX.
The value of nent is greater than _POSIX_AIO_LISTIO_MAX.
If either lio_listio() succeeds in queuing all of its requests, or errno is set to EAGAIN, EINTR, or EIO, then some of the I/O specified from the list may have been initiated. In this event, each aiocb structure contains errors specific to the read() or write() function being performed:
The following additional error codes may be set for each aiocb control block:
lio_listio() is POSIX 1003.1 AIO; lio_listio64() is Large-file support
| Safety: | |
|---|---|
| Cancellation point | No |
| Interrupt handler | No |
| Signal handler | Yes |
| Thread | Yes |
aio_cancel(), aio_error(), aio_fsync(), aio_read(), aio_return(), aio_write(), aiocb, close(), execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe(), exit(), fcntl(), fork(), lseek(), read(), sigevent, write()