aio_write()

Асинхронно записать в файл

Прототип:

#include <aio.h>
int aio_write( struct aiocb *aiocbptr );

Аргументы:

aiocbptr
Указатель на управляющий блок асинхронного ввода/вывода типа struct aiocb, который определяет, сколько данных должно быть записано и куда.

Библиотека:

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, статус ошибки устанавливается в соответствующее значение:

EBADF
Аргумент aiocbptr->aio_fildes не является корректным файловым дескриптором, открытым для записи.
EINVAL
Некорректное значение смещения в файле aiocbptr->aio_offset, некорректное значение aiocbptr->aio_reqprio или aiocbptr->aio_nbytes.

Если aio_write() успешно ставит в очередь операцию ввода/вывода, но в дальнейшем операция отменяется или вызывает ошибку, статус возврата асинхронной операции является одним из значений, обычно возвращаемых write(). Кроме того, статус ошибки асинхронной операции устанавливается в один из статусов ошибки, обычно устанавливаемый write() или в один из следующих:

EBADF
Аргумент aiocbptr->aio_fildes не является корректным файловым дескриптором, открытым для записи.
ECANCELED
Запрашиваемая операция ввода/вывода была отменена до ее завершения из-за явного запроса aio_cancel().
EINVAL
Смещение файла, указанное в aiocbptr->aio_offset, некорректно.

Следующее условие может быть обнаружено синхронно или асинхронно:

EOVERFLOW
Файл является обычным файлом, aiocbptr->aio_nbytes превышает 0 и начальное смещение aiocbptr->aio_offset превышает максимальное смещение открытого файлового дескриптора, определяемого aiocbptr->aio_fildes.

Возвращаемое значение:

0
Успешное завершение.
-1
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EAGAIN
Запрашиваемая асинхронная операция ввода/вывода не была помещена в очередь из-за системных ресурсных ограничений.

Классификация:

POSIX 1003.1 Asynchronous Input/Output

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Предостережения:

При первом вызове функций aio_*() создается пул потоков, что делает процесс многопоточным, если он не был таковым. Пул потоков не уничтожится до тех пор, пока процесс не завершится.

Тематические ссылки:

aio_cancel(), aio_error(), aio_fsync(), aio_read(), aio_return(), aio_suspend(), struct aiocb, write()




Предыдущий раздел: Описание API системной библиотеки