Provided by: manpages-ru-dev_4.21.0-2_all bug

ИМЯ

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

LIBRARY

       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
       <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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

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