io_submit - submit asynchronous I/O blocks for processing
#include <linux/aio_abi.h> /* Defines needed types */
int io_submit(aio_context_t ctx_id, long nr, struct iocb **iocbpp);
: There is no glibc wrapper for this system call; see NOTES.
() system call queues nr
I/O request blocks for
processing in the AIO context ctx_id
. The iocbpp
be an array of nr
AIO control blocks, which will be submitted to
On success, io_submit
() returns the number of iocb
(which may be 0 if nr
is zero). For the failure return, see NOTES.
- Insufficient resources are available to queue any iocbs.
- The file descriptor specified in the first iocb is invalid.
- One of the data structures points to invalid data.
- The AIO context specified by ctx_id is invalid. nr is less
than 0. The iocb at *iocbpp is not properly initialized,
or the operation specified is invalid for the file descriptor in the
- io_submit() is not implemented on this architecture.
The asynchronous I/O system calls first appeared in Linux 2.5.
() is Linux-specific and should not be used in programs that are
intended to be portable.
Glibc does not provide a wrapper function for this system call. You could invoke
it using syscall(2)
. But instead, you probably want to use the
() wrapper function provided by libaio
Note that the libaio
wrapper function uses a different type
) for the ctx_id
argument. Note also that the
wrapper does not follow the usual C library conventions for
indicating errors: on error it returns a negated error number (the negative of
one of the values listed in ERRORS). If the system call is invoked via
, then the return value follows the usual conventions for
indicating an error: -1, with errno
set to a (positive) value that
indicates the error.
This page is part of release 4.10 of the Linux man-pages
description of the project, information about reporting bugs, and the latest
version of this page, can be found at