May 4, 2007 LIO_LISTIO 3

### NAME

lio_listio - list directed I/O (REALTIME)

### LIBRARY

POSIX Real-time Library (librt, -lrt)

### SYNOPSIS

```int` lio_listio(`` ```int mode` ```struct aiocb * const list[]` ```int nent` ```struct sigevent *sig` )

### DESCRIPTION

The lio_listio(``) function initiates a list of I/O requests with a single function call. The ```list` argument is an array of pointers to structures describing each operation to perform, with ```nent` elements. ```NULL` elements are ignored.

The aio_lio_opcode field of each specifies the operation to be performed. The following operations are supported:

```LIO_READ`
  Read data as if by a call to aio_read(3).

```LIO_NOP`
  No operation.

```LIO_WRITE`
  Write data as if by a call to aio_write(3).

If the ```mode` argument is ```LIO_WAIT`, lio_listio(``) does not return until all the requested operations have been completed. If ```mode` is ```LIO_NOWAIT`, the requests are processed asynchronously, and the signal specified by ```sig` is sent when all operations have completed. If ```sig` is ```NULL`, the calling process is not notified of I/O completion.

The order in which the requests are carried out is not specified, and there is no guarantee that they will be executed sequentially.

### RETURN VALUES

If ```mode` is ```LIO_WAIT`, the lio_listio(``) function returns 0 if the operations completed successfully, otherwise -1.

If ```mode` is ```LIO_NOWAIT`, the lio_listio(``) function returns 0 if the operations are successfully queued, otherwise -1.

### ERRORS

The lio_listio(``) function will fail if:

[```EAGAIN`]
  There are not enough resources to enqueue the requests.

[```EAGAIN`]
  The request would cause the system-wide limit ```AIO_MAX` to be exceeded.

[```EINTR`]
  A signal interrupted the system call before it could be completed.

[```EINVAL`]
  The ```mode` argument is neither ```LIO_WAIT` nor ```LIO_NOWAIT`, or ```nent` is greater than ```AIO_LISTIO_MAX`.

[```EIO`]
  One or more requests failed.

In addition, the lio_listio(``) function may fail for any of the reasons listed for aio_read(3) and aio_write(3).

If lio_listio(``) succeeds, or fails with an error code of ```EAGAIN`,`EINTR`, or ```EIO`, some of the requests may have been initiated. The caller should check the error status of each structure individually by calling aio_error(3).

### SEE ALSO

read(2), siginfo(2), write(2), aio_error(3), aio_read(3), aio_write(3)

### STANDARDS

The lio_listio(``) function is expected to conform to IEEE Std 1003.1-2001 (``POSIX.1'') .