Scroll to navigation

LIO_LISTIO(3) Руководство программиста Linux LIO_LISTIO(3)

ИМЯ

lio_listio - запускает список запросов ввода-вывода на выполнение

СИНТАКСИС

#include <aio.h>
int lio_listio(int mode, struct aiocb *const aiocb_list[],
               int nitems, struct sigevent *sevp);
Компонуется при указании параметра -lrt.

ОПИСАНИЕ

Функция lio_listio() запускает на выполнение список операций ввода-вывода, описанных в массиве aiocb_list.

Значение операции mode может быть одним из следующих:

Вызов не завершается до тех пор, пока не будут выполнены все операции. Аргумент sevp игнорируется.
Операции ввода-вывода ставятся в очередь на обработку и вызов завершается. После выполнения всех операций ввода-вывода посылается асинхронное уведомление, задаваемое в аргументе sevp; подробности смотрите в sigevent(7). Если значение sevp равно NULL, то асинхронные уведомления не посылается.

Аргумент aiocb_list представляет собой массив указателей на структуры aiocb, в которых описаны операции ввода-вывода. Эти операции выполняются в произвольном порядке. В аргументе nitems указывается размер массива aiocb_list. Указатели null в aiocb_list игнорируются.

В каждом управляющем блоке в aiocb_list в поле aio_lio_opcode задаётся выполняемая операция ввода вывода; значения:

Выполнить операцию чтения. Операция ставится в очередь как вызов aio_read(3) с указанным управляющим блоком.
Выполнить операцию записи. Операция ставится в очередь как вызов aio_write(3) с указанным управляющим блоком.
Игнорировать управляющий блок.

Остальные поля в каждом управляющем блоке имеют то же назначение, что и для 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() может завершиться с ошибкой по следующим причинам:

Не хватает ресурсов.
Количество операций ввода-вывода, указанное в nitems, превысило ограничение AIO_MAX.
Значение mode равно LIO_WAIT и был получен сигнал до завершения всех операций ввода-вывода; смотрите signal(7) (это может быть даже один из асинхронных сигналов о завершении ввода-вывода).
Неправильное значение mode, или значение nitems превышает ограничение AIO_LISTIO_MAX.
Одна или более операций, указанных в 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)

ЗАМЕЧАНИЯ

Эта страница является частью проекта Linux man-pages версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.

ПЕРЕВОД

Русский перевод этой страницы руководства был сделан Artyom Kunyov <artkun@guitarplayer.ru>, Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Katrin Kutepova <blackkatelv@gmail.com>, Konstantin Shvaykovskiy <kot.shv@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.

11 апреля 2020 г.