xref: /illumos-gate/usr/src/man/man3c/aio_waitn.3c (revision d0b12b660e0741581d18f1f3a7d5268e0a5f1806)
te
Copyright (c) 2008, Sun Microsystems, Inc. All Rights Reserved.
The contents of this file are subject to the terms of the Common Development and Distribution License (the "License"). You may not use this file except in compliance with the License.
You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing. See the License for the specific language governing permissions and limitations under the License.
When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE. If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
AIO_WAITN 3C "Dec 18, 2008"
NAME
aio_waitn - wait for completion of asynchronous I/O operations
SYNOPSIS

#include <aio.h>

int aio_waitn(struct aiocb *list[], uint_t nent,
 uint_t *nwait, const struct timespec *timeout);
DESCRIPTION

The aio_waitn() function suspends the calling thread until at least the number of requests specified by nwait have completed, until a signal interrupts the function, or if timeout is not NULL, until the time interval specified by timeout has passed.

To effect a poll, the timeout argument should be non-zero, pointing to a zero-valued timespec structure.

The list argument is an array of uninitialized I/O completion block pointers to be filled in by the system before aio_waitn() returns. The nent argument indicates the maximum number of elements that can be placed in list[] and is limited to _AIO_LISTIO_MAX = 4096.

The nwait argument points to the minimum number of requests aio_waitn() should wait for. Upon returning, the content of nwait is set to the actual number of requests in the aiocb list, which can be greater than the initial value specified in nwait. The aio_waitn() function attempts to return as many requests as possible, up to the number of outstanding asynchronous I/Os but less than or equal to the maximum specified by the nent argument. As soon as the number of outstanding asynchronous I/O requests becomes 0, aio_waitn() returns with the current list of completed requests.

The aiocb structures returned will have been used in initiating an asynchronous I/O request from any thread in the process with aio_read(3C), aio_write(3C), or lio_listio(3C).

If the time interval expires before the expected number of I/O operations specified by nwait are completed, aio_waitn() returns the number of completed requests and the content of the nwait pointer is updated with that number.

If aio_waitn() is interrupted by a signal, nwait is set to the number of completed requests.

The application can determine the status of the completed asynchronous I/O by checking the associated error and return status using aio_error(3C) and aio_return(3C), respectively.

RETURN VALUES

Upon successful completion, aio_waitn() returns 0. Otherwise, it returns -1 and sets errno to indicate the error.

ERRORS

The aio_waitn() function will fail if: EAGAIN

There are no outstanding asynchronous I/O requests.

EFAULT

The list[], nwait, or timeout argument points to an address outside the address space of the process. The errno variable is set to EFAULT only if this condition is detected by the application process.

EINTR

The execution of aio_waitn() was interrupted by a signal.

EINVAL

The timeout element tv_sec or tv_nsec is < 0, nent is set to 0 or > _AIO_LISTIO_MAX, or nwait is either set to 0 or is > nent.

ENOMEM

There is currently not enough available memory. The application can try again later.

ETIME

The time interval expired before nwait outstanding requests have completed.

USAGE

The aio_waitn() function has a transitional interface for 64-bit file offsets. See lf64(5).

ATTRIBUTES

See attributes(5) for descriptions of the following attributes:

ATTRIBUTE TYPE ATTRIBUTE VALUE
Interface Stability Committed
MT-Level Safe
SEE ALSO

aio.h(3HEAD), aio_error(3C), aio_read(3C), aio_write(3C), lio_listio(3C), aio_return(3C), attributes(5), lf64(5)