aio_read -
асинхронное
чтение
Real-time library (
librt,
-lrt)
#include <aio.h>
int aio_read(struct aiocb *aiocbp);
Функция
aio_read()
ставит в
очередь
запрос
ввода-вывода,
описанный
в буфере, на
который
указывает
aiocbp. Эта
функция
является
асинхронным
аналогом
вызова
read(2).
Аргументы
функции
read(fd, buf, count)
соответствуют
(в
указанном
порядке)
полям
aio_fildes,
aio_buf
и
aio_nbytes
структуры,
на которую
указывает
aiocbp
(описание
структуры
aiocb смотрите
в
aio(7)).
Чтение
данных
выполняется
начиная с
абсолютного
положения
в файле
aiocbp->aio_offset,
независимо
от
смещения в
файле.
После
вызова
значение
смещения в
файле не
определено.
Прилагательное
«асинхронный»
означает,
что вызов
возвращает
управление
сразу
после
установки
запроса в
очередь;
при
завершении
вызова
чтение
может уже
выполнится,
а может и
нет. Для
проверки
выполнения
чтения
используйте
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 не
является
допустимым
файловым
дескриптором
для
открытия
на чтение.
- EINVAL
- Одно или
несколько
значений у
aio_offset, aio_reqprio или
aio_nbytes
неверны.
- ENOSYS
- Функция
aio_read() не
реализована.
- EOVERFLOW
- Файл
является
обычным
файлом, мы
начинаем
читать его
до конца
файла и
хотим
получить
не менее
одного
байта, но
начальная
позиция
находится
за
максимальным
значением
смещения
этого
файла.
Функция
aio_read()
доступна в
glibc начиная с
версии 2.1.
Описание
терминов
данного
раздела
смотрите в
attributes(7).
Интерфейс |
Атрибут |
Значение |
aio_read() |
Безвредность
в нитях |
MT-Safe |
POSIX.1-2001, POSIX.1-2008.
Желательно
обнулять
буфер
блока
управления
перед
использованием.
Блок
управления
не должен
изменяться
во время
выполнения
операции
чтения.
Область
буфера, в
которую
выполняется
чтение,
должна
быть
недоступна
во время
операции,
иначе
поведение
непредсказуемо.
Области
памяти, с
которыми
производится
работа,
должны
оставаться
доступными.
Одновременное
выполнение
операций
ввода-вывода
через
совместно
используемую
структуру
aiocb приводит
к
непредсказуемым
результатам.
Смотрите
aio(7).
aio_cancel(3),
aio_error(3),
aio_fsync(3),
aio_return(3),
aio_suspend(3),
aio_write(3),
lio_listio(3),
aio(7)
Русский
перевод
этой
страницы
руководства
был сделан
Dmitry Bolkhovskikh <
[email protected]> и Yuri Kozlov
<
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]