Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

       io_submit - отправляет асинхронные блоки ввода-вывода для обработки

БИБЛИОТЕКА

       Стандартная библиотека языка C (libc, -lc)

       Alternatively, Asynchronous I/O library (libaio, -laio); see VERSIONS.

ОБЗОР

       #include <linux/aio_abi.h>          /* определяет необходимые типы */

       int io_submit(aio_context_t ctx_id, long nr, struct iocb **iocbpp);

       Примечание: Для этого системного вызова нет оболочки glibc; см. ВЕРСИИ.

ОПИСАНИЕ

       Note:  this  page describes the raw Linux system call interface.  The wrapper function provided by libaio
       uses a different type for the ctx_id argument.  See VERSIONS.

       Системный вызов io_submit() ставит в очередь nr запросов блоков ввода-вывода для  обработки  в  контексте
       AIO ctx_id. Значение iocbpp должно быть массивом из nr управляющих блоков AIO, которые будут отправлены в
       контекст ctx_id.

       Структура  iocb  (блок  управления  вводом-выводом), определённая в linux/aio_abi.h, описывает параметры,
       которыми управляется операция ввода-вывода.

           #include <linux/aio_abi.h>

           struct iocb {
               __u64   aio_data;
               __u32   PADDED(aio_key, aio_rw_flags);
               __u16   aio_lio_opcode;
               __s16   aio_reqprio;
               __u32   aio_fildes;
               __u64   aio_buf;
               __u64   aio_nbytes;
               __s64   aio_offset;
               __u64   aio_reserved2;
               __u32   aio_flags;
               __u32   aio_resfd;
           };

       Поля этой структуры имеют следующее назначение:

       aio_data
              Эти данные копируются в  поле  data  структуры  io_event  при  завершении  ввода-вывода  (смотрите
              io_getevents(2)).

       aio_key
              Внутреннее поле, используется ядром. Не изменяйте это поле после вызова io_submit().

       aio_rw_flags
              Флаги чтения-записи, передаваемые со структурой. Возможные значения:

              RWF_APPEND (начиная с Linux 4.16)
                     Добавить  данный  в конец файла. Смотрите описание флага с таким же именем в pwritev2(2), а
                     также описание O_APPEND в open(2).  Поле  aio_offset  игнорируется.  Файловое  смещение  не
                     изменяется.

              RWF_DSYNC (начиная с Linux 4.13)
                     Операция  записи  завершается  согласно  требованиям целостности данных синхронизированного
                     ввода-вывода. Смотрите описание флага с тем же  именем  в  pwritev2(2),  а  также  описание
                     O_DSYNC в open(2).

              RWF_HIPRI (начиная с Linux 4.13)
                     Запрос с высоким приоритетом; опросить, если возможно

              RWF_NOWAIT (начиная с Linux 4.14)
                     Не  ждать, если ввод-вывод блокирует операции, такие как выделение файловых блоков, очистка
                     грязной страницы, блокировку мьютексов или вызывает перегрузку блочного  устройства  внутри
                     ядра.  Если  имеется  что-то  из  этого,  то  управляющий  блок  возвращается немедленно со
                     значением -EAGAIN в поле res структуры io_event (смотрите io_getevents(2)).

              RWF_SYNC (начиная с Linux 4.13)
                     Операция записи завершается  согласно  требованиям  целостности  файла  синхронизированного
                     ввода-вывода.  Смотрите  описание  флага  с  тем  же именем в pwritev2(2), а также описание
                     O_SYNC в open(2).

       aio_lio_opcode
              Тип ввода-вывода, выполняемый структурой iocb.  Возможные  значения,  определены  перечислением  в
              linux/aio_abi.h:

                  enum {
                      IOCB_CMD_PREAD = 0,
                      IOCB_CMD_PWRITE = 1,
                      IOCB_CMD_FSYNC = 2,
                      IOCB_CMD_FDSYNC = 3,
                      IOCB_CMD_POLL = 5,
                      IOCB_CMD_NOOP = 6,
                      IOCB_CMD_PREADV = 7,
                      IOCB_CMD_PWRITEV = 8,
                  };

       aio_reqprio
              Определяет приоритет запросов.

       aio_fildes
              Файловый дескриптор, над которым будут выполняться операции ввода-вывода.

       aio_buf
              Буфер, используемый для пересылки данных при операции чтения или записи.

       aio_nbytes
              Размер буфера, на который указывает aio_buf.

       aio_offset
              Файловое смещение, начиная с которого будут выполняться операции ввода-вывода.

       aio_flags
              Набор флагов, связанный со структурой iocb. Допускаемые значения:

              IOCB_FLAG_RESFD
                     Управление  асинхронным  вводом-выводом  должно  сигнализировать  файловому  дескриптору  в
                     aio_resfd после выполнения.

              IOCB_FLAG_IOPRIO (начиная с Linux 4.18)
                     Считать поле aio_reqprio как IOPRIO_VALUE, определённое в linux/ioprio.h.

       aio_resfd
              Файловый дескриптор для сигнализации завершения асинхронного ввода-вывода.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       On success, io_submit()  returns the number of iocbs submitted (which may be less than nr, or 0 if nr  is
       zero).  For the failure return, see VERSIONS.

ОШИБКИ

       EAGAIN Недостаточно ресурсов для постановки в очередь iocb.

       EBADF  Некорректный файловый дескриптор, указанный в первом iocb.

       EFAULT Одна из структур данных указывает на некорректные данные.

       EINVAL Некорректен  контекст  AIO,  указанный  ctx_id.  Значение  nr меньше 0. Значение iocb в *iocbpp[0]
              некорректно инициализировано, указанная операция некорректна для файлового дескриптора в iocb  или
              некорректное значение в поле aio_reqprio.

       ENOSYS Вызов io_submit() не реализован для этой архитектуры.

       EPERM  Поле  aio_reqprio  содержит  класс  IOPRIO_CLASS_RT,  но  представляющий контекст не имеет мандата
              CAP_SYS_ADMIN.

ВЕРСИИ

       glibc does not provide a wrapper for this system call.   You  could  invoke  it  using  syscall(2).   But
       instead, you probably want to use the io_submit()  wrapper function provided by libaio.

       Заметим,  что  в обёрточной функции libaio используется другой тип (io_context_t) аргумента ctx_id. Также
       заметим, что libaio не следует соглашениям обычной библиотеки C  для  возврата  ошибок:  при  ошибке  она
       возвращает  отрицательный  номер  ошибки  (из списка в разделе ОШИБКИ). Если системный вызов вызывается с
       помощью syscall(2), то  возвращаемое  значение  следует  обычным  соглашениям  для  указания  на  ошибку:
       возвращается -1 и в errno записывается (положительное) значение возникшей ошибки.

СТАНДАРТЫ

       Linux.

ИСТОРИЯ

       Linux 2.5.

СМОТРИТЕ ТАКЖЕ

       io_cancel(2), io_destroy(2), io_getevents(2), io_setup(2), aio(7)

ПЕРЕВОД

       Русский  перевод  этой  страницы  руководства  разработал(и) Azamat Hackimov <azamat.hackimov@gmail.com>,
       Dmitriy S. Seregin <dseregin@59.ru>, Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com>  и
       Kirill Rekhov <krekhov.dev@gmail.com>

       Этот  перевод является свободной программной документацией; он распространяется на условиях общедоступной
       лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html  версии  3  или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если  вы  обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
       разработчику(ам)  по  его(их)  адресу(ам)  электронной  почты  или  по   адресу   списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                     io_submit(2)