aio_write(2)
NAME
aio_write - asynchronous write to a file (REALTIME)
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <aio.h> int aio_write(struct aiocb *iocb);
DESCRIPTION
- The aio_write() system call allows the calling process to
- write
iocb->aio_nbytes from the buffer pointed to by iocb->aio_buf - to the
descriptor iocb->aio_fildes. The call returns immediately - after the
write request has been enqueued to the descriptor; the write - may or may
not have completed at the time the call returns. If the re - quest could
not be enqueued, generally due to invalid arguments, the - call returns
without having enqueued the request. - If O_APPEND is set for iocb->aio_fildes, aio_write() opera
- tions append to
the file in the same order as the calls were made. If O_AP - PEND is not
set for the file descriptor, the write operation will occur - at the absolute position from the beginning of the file plus
- iocb->aio_offset.
- If _POSIX_PRIORITIZED_IO is defined, and the descriptor sup
- ports it, then
the enqueued operation is submitted at a priority equal to - that of the
calling process minus iocb->aio_reqprio. - The iocb pointer may be subsequently used as an argument to
- aio_return()
and aio_error() in order to determine return or error status - for the
enqueued operation while it is in progress. - If the request is successfully enqueued, the value of
- iocb->aio_offset
can be modified during the request as context, so this value - must not be
referenced after the request is enqueued.
RESTRICTIONS
- The Asynchronous I/O Control Block structure pointed to by
- iocb and the
buffer that the iocb->aio_buf member of that structure ref - erences must
remain valid until the operation has completed. For this - reason, use of
auto (stack) variables for these objects is discouraged. - The asynchronous I/O control buffer iocb should be zeroed
- before the
aio_write() system call to avoid passing bogus context in - formation to the
kernel. - Modifications of the Asynchronous I/O Control Block struc
- ture or the
buffer contents after the request has been enqueued, but be - fore the
request has completed, are not allowed. - If the file offset in iocb->aio_offset is past the offset
- maximum for
iocb->aio_fildes, no I/O will occur.
RETURN VALUES
- The aio_write() function returns the value 0 if successful;
- otherwise the
value -1 is returned and the global variable errno is set to - indicate the
error.
ERRORS
The aio_write() system call will fail if:
- [EAGAIN] The request was not queued because of
- system resource
- limitations.
- [ENOSYS] The aio_write() system call is not sup
- ported.
- The following conditions may be synchronously detected when
- the
aio_write() system call is made, or asynchronously, at any - time thereafter. If they are detected at call time, aio_write() re
- turns -1 and
sets errno appropriately; otherwise the aio_return() system - call must be
called, and will return -1, and aio_error() must be called - to determine
the actual value that would have been returned in errno. - [EBADF] The iocb->aio_fildes argument is invalid,
- or is not
- opened for writing.
- [EINVAL] The offset iocb->aio_offset is not valid,
- the priority
- specified by iocb->aio_reqprio is not a
- valid priority, or the number of bytes specified by
iocb->aio_nbytes is not valid. - If the request is successfully enqueued, but subsequently
- canceled or an
error occurs, the value returned by the aio_return() system - call is per
the write(2) system call, and the value returned by the - aio_error() system call is either one of the error returns from the
- write(2) system
call, or one of: - [EBADF] The iocb->aio_fildes argument is invalid
- for writing.
- [ECANCELED] The request was explicitly canceled via a
- call to
- aio_cancel().
- [EINVAL] The offset iocb->aio_offset would be in
- valid.
SEE ALSO
aio_cancel(2), aio_error(2), aio_return(2), aio_suspend(2),
aio_waitcomplete(2), aio(4)
STANDARDS
- The aio_write() system call is expected to conform to the
- IEEE Std 1003.1
(``POSIX.1'') standard.
HISTORY
The aio_write() system call first appeared in FreeBSD 3.0.
AUTHORS
- This manual page was written by Wes Peters <wes@soft
- weyr.com>.
BUGS
- Invalid information in iocb->_aiocb_private may confuse the
- kernel.
- BSD June 2, 1999