- bullseye-backports 4.18.1-1~bpo11+1
- testing 4.18.1-1
- unstable 4.18.1-1
AIO_WRITE(3) | Руководство программиста Linux | AIO_WRITE(3) |
ИМЯ¶
aio_write - асинхронная запись
СИНТАКСИС¶
#include <aio.h>
int aio_write(struct aiocb *aiocbp);
Компонуется при указании параметра -lrt.
ОПИСАНИЕ¶
Функция aio_write() ставит в очередь запрос ввода-вывода, описанный в буфере, на который указывает aiocbp. Эта функция является асинхронным аналогом вызова write(2). Аргументы функции
write(fd, buf, count)
соответствуют (в указанном порядке) полям aio_fildes, aio_buf и aio_nbytes структуры, на которую указывает aiocbp (описание структуры aiocb смотрите в aio(7)).
Если флаг O_APPEND не установлен, то данные записываются начиная от абсолютного положения в файле aiocbp->aio_offset, независимо от смещения в файле. Если флаг O_APPEND установлен, то данные записываются в конец файла в том порядке, в котором запускались вызовы aio_write(). После вызова значение смещения файла не определено.
Прилагательное «асинхронный» означает, что вызов возвращает управление сразу после установки запроса в очередь; при завершении вызова запись может уже выполнится, а может и нет. Для проверки выполнения чтения используйте aio_error(3). Состояние возврата завершённой операции ввода-вывода можно получить с помощью aio_return(3). Асинхронное уведомление о выполнении ввода-вывода можно получить, установив aiocbp->aio_sigevent соответствующим образом; подробней смотрите в sigevent(7).
Если определён макрос _POSIX_PRIORITIZED_IO и данный файл его поддерживает, асинхронная операция устанавливается в очередь с приоритетом вызывающего процесса минус aiocbp->aio_reqprio.
Поле aiocbp->aio_lio_opcode игнорируется.
Запись не производится в обычный файл, если смещение превышает максимум.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении возвращается 0. При ошибке запрос не устанавливается в очередь, возвращается -1, errno присваивается соответствующее значение. Если ошибка обнаруживается не сразу, то о ней будет сообщено посредством aio_return(3) (возвращается состояние -1) и aio_error(3) (состояние ошибки — всё, что было бы в errno, например EBADF).
ОШИБКИ¶
- EAGAIN
- Не хватает ресурсов.
- EBADF
- Значение aio_fildes не является правильным файловым дескриптором, открытым для записи.
- EFBIG
- Файл является обычным файлом, мы хотим записать не менее одного байта, но начальная позиция равна максимальному значению смещения этого файла или превышает его.
- EINVAL
- Одно или несколько значений у aio_offset, aio_reqprio или aio_nbytes, неверны.
- ENOSYS
- Функция aio_write() не реализована.
ВЕРСИИ¶
Функция aio_write() доступна в glibc начиная с версии 2.1.
АТРИБУТЫ¶
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение |
aio_write() | Безвредность в нитях | MT-Safe |
СООТВЕТСТВИЕ СТАНДАРТАМ¶
POSIX.1-2001, POSIX.1-2008.
ЗАМЕЧАНИЯ¶
Желательно обнулять буфер блока управления перед использованием. Блок управления не должен изменяться во время выполнения операции записи. Область буфера, в которую выполняется запись, должна быть недоступна во время операции, иначе поведение непредсказуемо. Области памяти, с которыми производится работа, должны оставаться доступными.
Одновременное выполнение операций ввода-вывода через совместно используемую структуру aiocb приводит к непредсказуемым результатам.
СМ. ТАКЖЕ¶
aio_cancel(3), aio_error(3), aio_fsync(3), aio_read(3), aio_return(3), aio_suspend(3), lio_listio(3), aio(7)
ЗАМЕЧАНИЯ¶
Эта страница является частью проекта Linux man-pages версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.
ПЕРЕВОД¶
Русский перевод этой страницы руководства был сделан Dmitry Bolkhovskikh <d20052005@yandex.ru> и Yuri Kozlov <yuray@komyakino.ru>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
15 сентября 2017 г. |