#ifndef ISO
type {struct aiocb}

// Test elements of the AIO control struct.
element {struct aiocb} int aio_fildes
element {struct aiocb} off_t aio_offset
element {struct aiocb} {volatile void*} aio_buf
element {struct aiocb} size_t aio_nbytes
element {struct aiocb} int aio_reqprio
element {struct aiocb} {struct sigevent} aio_sigevent
element {struct aiocb} int aio_lio_opcode

constant AIO_CANCELED
constant AIO_NOTCANCELED
constant AIO_ALLDONE
constant LIO_WAIT
constant LIO_NOWAIT
constant LIO_READ
constant LIO_WRITE
constant LIO_NOP

function int aio_cancel (int, struct aiocb*)
function int aio_error (const struct aiocb*)
function int aio_fsync (int, struct aiocb*)
function int aio_read (struct aiocb*)
function ssize_t aio_return (struct aiocb*)
function int aio_suspend (const struct aiocb* const[], int, const struct timespec*)
function int aio_write (struct aiocb*)
function int lio_listio (int, struct aiocb *const[], int, struct sigevent*)

# if !defined POSIX
allow-header fcntl.h
allow-header signal.h
allow-header sys/types.h
allow-header time.h
# endif

allow aio_*
allow lio_*
allow AIO_*
allow LIO_*
allow *_t
#endif
