lio_listio -
запускает
список
запросов
ввода-вывода
на
выполнение
Real-time library (
librt,
-lrt)
#include <aio.h>
int lio_listio(int mode,
struct aiocb *restrict const aiocb_list[restrict],
int nitems, struct sigevent *restrict sevp);
Функция
lio_listio()
запускает
на
выполнение
список
операций
ввода-вывода,
описанных
в массиве
aiocb_list.
Значение
операции
mode
может быть
одним из
следующих:
- LIO_WAIT
- Вызов не
завершается
до тех пор,
пока не
будут
выполнены
все
операции.
Аргумент
sevp
игнорируется.
- LIO_NOWAIT
- Операции
ввода-вывода
ставятся в
очередь на
обработку
и вызов
завершается.
После
выполнения
всех
операций
ввода-вывода
посылается
асинхронное
уведомление,
задаваемое
в
аргументе
sevp;
подробности
смотрите в
sigevent(7). Если
значение
sevp равно NULL,
то
асинхронные
уведомления
не
посылается.
The
aiocb_list argument is an array of pointers to
aiocb
structures that describe I/O operations. These operations are executed in an
unspecified order. The
nitems argument specifies the size of the array
aiocb_list. Null pointers in
aiocb_list are ignored.
В каждом
управляющем
блоке в
aiocb_list в
поле
aio_lio_opcode
задаётся
выполняемая
операция
ввода
вывода;
значения:
- LIO_READ
- Выполнить
операцию
чтения.
Операция
ставится в
очередь
как вызов
aio_read(3) с
указанным
управляющим
блоком.
- LIO_WRITE
- Выполнить
операцию
записи.
Операция
ставится в
очередь
как вызов
aio_write(3) с
указанным
управляющим
блоком.
- LIO_NOP
- Игнорировать
управляющий
блок.
Остальные
поля в
каждом
управляющем
блоке
имеют то же
назначение,
что и для
aio_read(3)
и
aio_write(3). Поля
aio_sigevent в каждом
управляющем
блоке
могут
использоваться
для
указания
уведомлений
по
отдельным
операциям
ввода-вывода
(смотрите
sigevent(7)).
При
значении
mode
равным
LIO_NOWAIT
функция
lio_listio()
возвращает
0, если все
операции
ввода-вывода
были
поставлены
в очередь. В
противном
случае
возвращается
-1 и в
errno
содержится
код ошибки.
При
значении
mode
равным
LIO_WAIT
функция
lio_listio()
возвращает
0, если все
операции
ввода-вывода
были
выполнены
без ошибок.
В
противном
случае
возвращается
-1 и в
errno
содержится
код ошибки.
В
возвращаемом
lio_listio()
состоянии
предоставляется
информация
только о
самом
вызове, а не
об
отдельных
операция
ввода-вывода.
Одна или
несколько
операций
ввода-вывода
могут
завершиться
с ошибкой,
но это не
повлияет
на
выполнение
остальных
операций.
Состояние
отдельный
операций
ввода-вывода
в
aiocb_list можно
определить
с помощью
aio_error(3). После
завершения
операции
её
результат
можно
получить с
помощью
aio_return(3).
Отдельные
операции
ввода-вывода
могут
завершиться
с ошибкой
по
причинам,
описанным
в
aio_read(3) и
aio_write(3).
Функция
lio_listio()
может
завершиться
с ошибкой
по
следующим
причинам:
- EAGAIN
- Не
хватает
ресурсов.
- EAGAIN
- Количество
операций
ввода-вывода,
указанное
в nitems,
превысило
ограничение
AIO_MAX.
- EINTR
- Значение
mode равно LIO_WAIT
и был
получен
сигнал до
завершения
всех
операций
ввода-вывода;
смотрите
signal(7) (это
может быть
даже один
из
асинхронных
сигналов о
завершении
ввода-вывода).
- EINVAL
- Неправильное
значение
mode, или
значение
nitems
превышает
ограничение
AIO_LISTIO_MAX.
- EIO
- Одна или
более
операций,
указанных
в aiocb_list,
завершились
с ошибкой.
Приложение
может
проверить
состояние
каждой
операции с
помощью
aio_return(3).
Если вызов
lio_listio()
завершился
с ошибкой
EAGAIN,
EINTR или
EIO,
то
некоторые
операции
из
aiocb_list могли
всё же
начаться.
Если вызов
lio_listio()
завершился
по другой
причине, то
ни одна из
операций
ввода-вывода
не
началась.
Функция
lio_listio()
доступна в
glibc начиная с
версии 2.1.
Описание
терминов
данного
раздела
смотрите в
attributes(7).
Интерфейс |
Атрибут |
Значение |
lio_listio() |
Безвредность
в нитях |
MT-Safe |
POSIX.1-2001, POSIX.1-2008.
Рекомендуется
обнулять
управляющие
блоки
перед
использованием.
Управляющие
блоки не
должны
изменяться
пока
выполняются
операции
ввода-вывода.
Нельзя
читать или
писать в
буферные
области во
время
выполнения
операций,
иначе
результат
непредсказуем.
Используемые
области
памяти
должны
оставаться
корректными
(valid).
Одновременное
выполнение
операций
ввода-вывода
через
совместно
используемую
структуру
aiocb приводит
к
непредсказуемым
результатам.
aio_cancel(3),
aio_error(3),
aio_fsync(3),
aio_return(3),
aio_suspend(3),
aio_write(3),
aio(7)
Русский
перевод
этой
страницы
руководства
был сделан
Artyom Kunyov <
[email protected]>, Azamat Hackimov
<
[email protected]>, Dmitry Bolkhovskikh
<
[email protected]>, Katrin Kutepova <
[email protected]>,
Konstantin Shvaykovskiy <
[email protected]>, Yuri Kozlov
<
[email protected]> и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]