---
name: "aio_suspend"
section: "3"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/aio_suspend/3"
---

# aio\_suspend(3)

wait for asynchronous I/O operation or timeout

## NAME

aio\_suspend - wait for asynchronous I/O operation or timeout

## LIBRARY

Real-time library (*librt*, *-lrt*)

## SYNOPSIS

```

```

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

**int aio\_suspend(**int n;                 **const struct aiocb \*const** *aiocb\_list***\[***n***\], int** *n***,**                 **const struct timespec \*restrict** *timeout***);**

## DESCRIPTION

The **aio\_suspend**() function suspends the calling thread until one of the following occurs:

- •

  One or more of the asynchronous I/O requests in the list *aiocb\_list* has completed.

- •

  A signal is delivered.

- •

  *timeout* is not NULL and the specified time interval has passed. (For details of the *timespec* structure, see [**nanosleep**(2)](/nanosleep/2.md).)

The *n* argument specifies the number of items in *aiocb\_list*. Each item in the list pointed to by *aiocb\_list* must be either NULL (and then is ignored), or a pointer to a control block on which I/O was initiated using [**aio\_read**(3)](/aio_read/3.md), [**aio\_write**(3)](/aio_write/3.md), or [**lio\_listio**(3)](/lio_listio/3.md). (See [**aio**(7)](/aio/7.md) for a description of the *aiocb* structure.)

If **CLOCK\_MONOTONIC** is supported, this clock is used to measure the timeout interval (see [**clock\_gettime**(2)](/clock_gettime/2.md)).

## RETURN VALUE

If this function returns after completion of one of the I/O requests specified in *aiocb\_list*, 0 is returned. Otherwise, -1 is returned, and *errno* is set to indicate the error.

## ERRORS

- **EAGAIN**

  The call timed out before any of the indicated operations had completed.

- **EINTR**

  The call was ended by signal (possibly the completion signal of one of the operations we were waiting for); see [**signal**(7)](/signal/7.md).

- **ENOSYS**

  **aio\_suspend**() is not implemented.

## ATTRIBUTES

For an explanation of the terms used in this section, see [**attributes**(7)](/attributes/7.md).

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **aio\_suspend**() | Thread safety | MT-Safe |

## STANDARDS

POSIX.1-2008.

## HISTORY

glibc 2.1. POSIX.1-2001.

POSIX doesn't specify the parameters to be *restrict*; that is specific to glibc.

## NOTES

One can achieve polling by using a non-NULL *timeout* that specifies a zero time interval.

If one or more of the asynchronous I/O operations specified in *aiocb\_list* has already completed at the time of the call to **aio\_suspend**(), then the call returns immediately.

To determine which I/O operations have completed after a successful return from **aio\_suspend**(), use [**aio\_error**(3)](/aio_error/3.md) to scan the list of *aiocb* structures pointed to by *aiocb\_list*.

## BUGS

The glibc implementation of **aio\_suspend**() is not async-signal-safe, in violation of the requirements of POSIX.1.

## SEE ALSO

[**aio\_cancel**(3)](/aio_cancel/3.md), [**aio\_error**(3)](/aio_error/3.md), [**aio\_fsync**(3)](/aio_fsync/3.md), [**aio\_read**(3)](/aio_read/3.md), [**aio\_return**(3)](/aio_return/3.md), [**aio\_write**(3)](/aio_write/3.md), [**lio\_listio**(3)](/lio_listio/3.md), [**aio**(7)](/aio/7.md), [**time**(7)](/time/7.md)
