---
name: "aio_waitcomplete"
section: "2"
platform: "linux"
package: "freebsd-manpages"
version: "6.0-5"
release: "Debian 4.0 (Etch)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/aio_waitcomplete"
---

# aio\_waitcomplete(2)

wait for the next completion of an aio request

## NAME

**aio\_waitcomplete** – wait for the next completion of an aio request

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<aio.h\>**

*int*\

**aio\_waitcomplete**(*struct aiocb \*\*iocbp*, *struct timespec \*timeout*);

## DESCRIPTION

The **aio\_waitcomplete**() system call waits for completion of an asynchronous I/O request. Upon completion, **aio\_waitcomplete**() returns the result of the function and sets *iocbp* to point to the structure associated with the original request. If an asynchronous I/O request is completed before **aio\_waitcomplete**() is called, it returns immediately with the completed request.

If *timeout* is a non-NULL pointer, it specifies a maximum interval to wait for a asynchronous I/O request to complete. If *timeout* is a NULL pointer, **aio\_waitcomplete**() waits indefinitely. To effect a poll, the *timeout* argument should be non-NULL, pointing to a zero-valued timeval structure.

The **aio\_waitcomplete**() system call also serves the function of **aio\_return**(), thus **aio\_return**() should not be called for the control block returned in *iocbp*.

## RETURN VALUES

If an asynchronous I/O request has completed, *iocbp* is set to point to the control block passed with the original request, and the status is returned as described in [read(2)](/read/2.md), [write(2)](/write/2.md), or [fsync(2)](/fsync/2.md). On failure, **aio\_waitcomplete**() returns -1, sets iocbp to NULL and sets *errno* to indicate the error condition.

## ERRORS

The **aio\_waitcomplete**() system call fails if:

- \[EINVAL\]

  The specified time limit is invalid.

- \[EAGAIN\]

  The process has not yet called **aio\_read**() or **aio\_write**().

- \[EINTR\]

  A signal was delivered before the timeout expired and before any asynchronous I/O requests completed.

- \[EWOULDBLOCK\]

  - \[EINPROGRESS\]

  The specified time limit expired before any asynchronous I/O requests completed.

## SEE ALSO

[aio\_cancel(2)](/aio_cancel/2.md), [aio\_error(2)](/aio_error/2.md), [aio\_read(2)](/aio_read/2.md), [aio\_return(2)](/aio_return/2.md), [aio\_suspend(2)](/aio_suspend/2.md), [aio\_write(2)](/aio_write/2.md), [fsync(2)](/fsync/2.md), [read(2)](/read/2.md), [write(2)](/write/2.md), [aio(4)](/aio/4.md)

## STANDARDS

The **aio\_waitcomplete**() system call is a FreeBSD-specific extension.

## HISTORY

The **aio\_waitcomplete**() system call first appeared in FreeBSD 4.0.

## AUTHORS

The **aio\_waitcomplete**() system call and this manual page were written by Christopher M Sedore ⟨cmsedore@maxwell.syr.edu⟩.
