aio_write -
асинхронная
запись
Real-time library (
librt,
-lrt)
#include <aio.h>
int aio_write(struct aiocb *aiocbp);
Функция
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
игнорируется.
Запись не
производится
в обычный
файл, если
смещение
превышает
максимум.
On success, 0 is returned. On error, the request is not enqueued, -1 is
returned, and
errno is set to indicate the error. If an error is
detected only later, it will be reported via
aio_return(3) (returns
status -1) and
aio_error(3) (error status—whatever one would
have gotten in
errno, such as
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)
Русский
перевод
этой
страницы
руководства
был сделан
Dmitry Bolkhovskikh <
[email protected]> и Yuri Kozlov
<
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]