Асинхронно записать в файл
#include <aio.h>int aio_write( struct aiocb *aiocbptr );
libc
Функция aio_read() асинхронно записывает aiocbptr->aio_nbytes байт в файл, определяемый aiocbptr->aio_fildes, из буфера, на который указывает aiocbptr->aio_buf. Она завершается, когда запрос на запись инициируется или, как минимум, ставится в очередь файла или устройства.
Асинхронная операция выполняется с приоритетом потока минус значение aiocbp->aio_reqprio.
Можно передать аргумент aiocbptr в функции aio_error() и aio_return() для того, чтобы определить статус ошибки и статус возврата для асинхронной операции во время ее выполнения.
Если для файлового дескриптора aiocbptr->aio_fildes не установлен O_APPEND
, запрошенная операция выполняется для абсолютной позиции файла, заданной aiocbptr->aio_offset, как если бы перед операцией была вызвана функция lseek() со смещением, равным aiocbptr->aio_offset и whence, равным SEEK_SET
.
Если же O_APPEND
установлен для файлового дескриптора, операции записи добавляются в файл в том же порядке, в котором были сделаны их вызовы.
Если для файла, ассоциированного с aiocbptr->aio_fildes, доступен синхронизованный ввод/вывод, данная функция ведет себя в соответствии с определением синхронизированного ввода/вывода целостности данных и файла.
Следующие условия могут быть обнаружены синхронно или асинхронно во время вызова aio_write(). Если любое из этих условий обнаружено синхронно, aio_write() возвращает -1
и устанавливает для errno соответствующее значение. Если любое из этих условий обнаружено асинхронно, статус возврата асинхронной операции устанавливается в -1
, статус ошибки устанавливается в соответствующее значение:
Если aio_write() успешно ставит в очередь операцию ввода/вывода, но в дальнейшем операция отменяется или вызывает ошибку, статус возврата асинхронной операции является одним из значений, обычно возвращаемых write(). Кроме того, статус ошибки асинхронной операции устанавливается в один из статусов ошибки, обычно устанавливаемый write() или в один из следующих:
Следующее условие может быть обнаружено синхронно или асинхронно:
0
и начальное смещение aiocbptr->aio_offset превышает максимальное смещение открытого файлового дескриптора, определяемого aiocbptr->aio_fildes.
POSIX 1003.1 Asynchronous Input/Output
При первом вызове функций aio_*() создается пул потоков, что делает процесс многопоточным, если он не был таковым. Пул потоков не уничтожится до тех пор, пока процесс не завершится.
aio_cancel(), aio_error(), aio_fsync(), aio_read(), aio_return(), aio_suspend(), struct aiocb, write()
Предыдущий раздел: Описание API системной библиотеки