Asynchronous I/O control block
#include <aio.h> struct aiocb { int aio_fildes; int aio_reqprio; #if __OFF_BITS__ == 64 off_t aio_offset; #elif __OFF_BITS__ == 32 #if defined(__LITTLEENDIAN__) off_t aio_offset; off_t aio_offset_hi; #elif defined(__BIGENDIAN__) off_t aio_offset_hi; off_t aio_offset; #else #error endian not configured for system #endif #else #error __OFF_BITS__ value is unsupported #endif __volatile void* aio_buf; size_t aio_nbytes; struct sigevent aio_sigevent; int aio_lio_opcode; /* used by the library, applications shouldn't touch them */ void *_aio_lio_state; int _aio_pad[3]; struct aiocb *_aio_next; unsigned _aio_flag; unsigned _aio_iotype; ssize_t _aio_result; unsigned _aio_error; void *_aio_suspend; void *_aio_plist; int _aio_policy; struct __sched_param _aio_param; }; #ifdef __EXT_LF64SRC struct aiocb64 { int aio_fildes; int aio_reqprio; off64_t aio_offset; __volatile void* aio_buf; size_t aio_nbytes; struct sigevent aio_sigevent; int aio_lio_opcode; /* used by the library, applications shouldn't touch them */ void *_aio_lio_state; int _aio_pad[3]; struct aiocb *_aio_next; unsigned _aio_flag; unsigned _aio_iotype; ssize_t _aio_result; unsigned _aio_error; void *_aio_suspend; void *_aio_plist; unsigned _aio_policy; struct __sched_param _aio_param; }; #endif
The aiocb and aiocb64 structures define the control block for asynchronous I/O operations.
These structures include at least the following:
The other members are used by the library. Applications shouldn't touch them.
aiocb is POSIX 1003.1; aiocb64 is Large-file support
The first time you call an aio_* function, a thread pool is created, making your process multithreaded if it isn't already. The thread pool isn't destroyed until your process ends.