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

# io\_getevents(2)

read asynchronous I/O events from the completion queue

## NAME

io\_getevents - read asynchronous I/O events from the completion queue

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#include <linux/aio_abi.h>    /* Definition of *io_* types */
#include <sys/syscall.h>      /* Definition of SYS_* constants */
#include <unistd.h>
```

**int syscall(SYS\_io\_getevents, aio\_context\_t** *ctx\_id***,**             **long** *min\_nr***, long** *nr***, struct io\_event \****events***,**             **struct timespec \****timeout***);**

## DESCRIPTION

*Note*: you probably want to use the [**io\_getevents**(3)](/io_getevents/3.md) wrapper function provided by *libaio*; see VERSIONS.

The **io\_getevents**() system call attempts to read at least *min\_nr* events and up to *nr* events from the completion queue of the AIO context specified by *ctx\_id*.

The *timeout* argument specifies the amount of time to wait for events, and is specified as a relative timeout in a [**timespec**(3)](/timespec/3.md) structure.

The specified time will be rounded up to the system clock granularity and is guaranteed not to expire early.

Specifying *timeout* as NULL means block indefinitely until at least *min\_nr* events have been obtained.

## RETURN VALUE

On success, **io\_getevents**() returns the number of events read. This may be 0, or a value less than *min\_nr*, if the *timeout* expired. It may also be a nonzero value less than *min\_nr*, if the call was interrupted by a signal handler.

On error, -1 is returned, and *errno* is set to indicate the error.

## ERRORS

- **EFAULT**

  Either *events* or *timeout* is an invalid pointer.

- **EINTR**

  Interrupted by a signal handler; see [**signal**(7)](/signal/7.md).

- **EINVAL**

  *ctx\_id* is invalid.

- **EINVAL**

  *min\_nr* is out of range or *nr* is out of range.

- **ENOSYS**

  **io\_getevents**() is not implemented on this architecture.

## VERSIONS

*libaio* ⟨https://pagure.io/libaio⟩ provides a wrapper function with the same name, but different prototype and return value. You probably want to use that wrapper.

## STANDARDS

Linux.

## HISTORY

Linux 2.5.

## SEE ALSO

[**io\_cancel**(2)](/io_cancel/2.md), [**io\_destroy**(2)](/io_destroy/2.md), [**io\_setup**(2)](/io_setup/2.md), [**io\_submit**(2)](/io_submit/2.md), [**io\_getevents**(3)](/io_getevents/3.md), [**timespec**(3)](/timespec/3.md), [**aio**(7)](/aio/7.md), [**time**(7)](/time/7.md)
