io_setup(2)

io_setup2

Create an asynchronous i/o context

Usage

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

long syscall(SYS_io_setup, unsigned int n, aio_context_t *ctx_idp);

Library

Standard C library (libc, -lc)

Overview

Note: you probably want to use the io_setup(3) wrapper function provided by libaio; see VERSIONS.

The io_setup() system call creates an asynchronous I/O context suitable for concurrently processing n operations. The ctx_idp argument must not point to an AIO context that already exists, and must be initialized to 0 prior to the call. On successful creation of the AIO context, *ctx_idp is filled in with the resulting handle.

Return value

On success, io_setup() returns 0. On error, -1 is returned, and errno is set to indicate the error.

Errors

EAGAIN

The specified n exceeds the limit of available events, as defined in /proc/sys/fs/aio-max-nr (see proc_sys_fs(5)).

EFAULT

An invalid pointer is passed for ctx_idp.

EINVAL

*ctx_idp is not initialized to 0.

EINVAL

The specified n exceeds internal limits. n should be greater than 0.

ENOMEM

Insufficient kernel resources are available.

ENOSYS

io_setup() 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.

Releases

12 releases since Debian 3.1 (Sarge); the text changed 11 times.

  1. 3.1
  2. 4.0
  3. 5.0
  4. 6.0
  5. 7
  6. 8
  7. 9
  8. 10
  9. 11
  10. 12
  11. 13
  12. Arch

Standards

Linux.

History

Linux 2.5.

From man-pages 6.19-1 in Arch Linux 2026-11-01. Parsed by carta from the page's man source.