Asynchronously write to a file
#include <aio.h> int aio_write( struct aiocb * aiocbptr );
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
The aio_write() function asynchronously writes aiocbptr->aio_nbytes to the file associated with aiocbptr->aio_fildes from the buffer that aiocbptr->aio_buf points to. The function returns when the write request has been initiated or, at a minimum, queued to the file or device.
You can use the aiocbptr argument as an argument to aio_error() and aio_return() to determine the error status and return status of the asynchronous operation while it's in progress.
If O_APPEND isn't set for the file descriptor aio_fildes, then the requested operation takes place at the absolute position in the file as given by aio_offset, as if lseek() were called immediately before the operation with an offset of aio_offset and a whence of SEEK_SET.
If O_APPEND is set for the file descriptor, write operations append to the file in the same order as the calls were made.
The following conditions may be detected synchronously at the time of the call to aio_write(), or asynchronously. If any of these conditions are detected synchronously, aio_write() returns -1 and sets errno to the corresponding value. If any of these conditions are detected asynchronously, the return status of the asynchronous operation is set to -1, and the error status of the asynchronous operation is set to the corresponding value:
If aio_write() successfully queues the I/O operation, but the operation is subsequently canceled or encounters an error, the return status of the asynchronous operation is one of the values normally returned by write(). In addition, the error status of the asynchronous operation is set to one of the error statuses normally set by write(), or one of the following:
The following condition may be detected synchronously or asynchronously:
0 if the I/O operation was successfully queued, or -1 if an error occurred (errno is set).
Safety: | |
---|---|
Cancellation point | No |
Interrupt handler | No |
Signal handler | Yes |
Thread | Yes |
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.
aio_cancel(), aio_error(), aio_fsync(), aio_read(), aio_return(), aio_suspend(), aiocb, write()