LIO_LISTIO(3)

LIO_LISTIO(3) | Library Functions Manual | LIO_LISTIO(3)

# NAME

`lio_listio` — list directed I/O (REALTIME)

# LIBRARY

POSIX Real-time Library (librt, -lrt)

# SYNOPSIS

`#include <aio.h>`

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 aiocb structures describing each operation to perform, with nent elements. `NULL` elements are ignored.

The aio_lio_opcode field of each aiocb 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; or 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 aiocb structure individually by calling aio_error(3).

# SEE ALSO

read(2), siginfo(2), write(2), aio(3), sigevent(3)

# STANDARDS

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

August 12, 2011 | NetBSD 11.0