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

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

       mq_open - открывает очередь сообщений

БИБЛИОТЕКА

       Библиотека реального времени (librt, -lrt)

ОБЗОР

       #include <fcntl.h>           /* Постоянные вида O_* */
       #include <sys/stat.h>        /* Постоянные для mode */
       #include <mqueue.h>

       mqd_t mq_open(const char *name, int oflag);
       mqd_t mq_open(const char *name, int oflag, mode_t mode,
                     struct mq_attr *attr);

ОПИСАНИЕ

       Функция  mq_open()  создает  новую  очередь  сообщений  POSIX или открывает существующую очередь. Очередь
       опознаётся по имени name. Для  получения  дополнительной  информации  о  создании  имени  name,  смотрите
       mq_overview(7).

       В  параметре  oflag задаются флаги, которые управляют работой вызова (значения флагов могут быть получены
       при включении <fcntl.h>). Поместить в параметр oflag можно только один из ниже приведенных флагов:

       O_RDONLY
              Открыть очередь только для получения сообщений.

       O_WRONLY
              Открыть очередь только для отправки сообщений.

       O_RDWR Открыть очередь для отправки и получения сообщений.

       Также в  oflag можно добавить ноль и более флагов, объединённых через ИЛИ:

       O_CLOEXEC (начиная с Linux 2.6.26)
              Установить флаг close-on-exec на файловом дескрипторе очереди сообщений. Описание полезности этого
              флага смотрите в open(2).

       O_CREAT
              Создать очередь сообщений, если она не существует. Владельцем (ID пользователя) очереди  сообщений
              назначается  эффективный  ID  пользователя  вызывающего  процесса.  Владельцем-группой (ID группы)
              назначается эффективный ID группы вызывающего процесса.

       O_EXCL Если в поле oflag выставлен флаг O_CREAT и очередь с заданным  именем  name   уже  существует,  то
              завершить вызов ошибкой EEXIST.

       O_NONBLOCK
              Открыть  очередь  в  неблокирующем  режиме.  При  обстоятельствах,  из-за  которых mq_receive(3) и
              mq_send(3), обычно, блокируются, теперь эти функции будут завершаться ошибкой EAGAIN.

       Если в oflag указан O_CREAT, требуется задать два дополнительных аргумента.  В  аргументе  mode  задаются
       права  доступа  к  новой  очереди,  как  для  open(2) (символические определения бит прав можно получить,
       включив <sys/stat.h>). В настройках прав учитывается umask процесса.

       В полях структуры struct mq_attr, на которую указывает attr, задаётся максимальное количество сообщений и
       максимальный размер сообщений, разрешённых в очереди. Эта структура определена следующим образом:

           struct mq_attr {
               long mq_flags;       /* флаги (игнорируются в mq_open()) */
               long mq_maxmsg;      /* макс. кол-во сообщений в очереди */
               long mq_msgsize;     /* макс. размер сообщения (в байтах) */
               long mq_curmsgs;     /* кол-во сообщений в очереди в данный момент
                                       (игнорируется в mq_open()) */
           };

       В  функции  mq_open()  используются  только  поля  mq_maxmsg  и  mq_msgsize;  остальные  значения   полей
       игнорируются.

       Если attr равно NULL, то очередь создаётся с атрибутами по умолчанию, зависящими от реализации. Начиная с
       Linux  3.5,  для  управления атрибутами по умолчанию можно управлять через два файла в /proc; подробности
       смотрите в mq_overview(7).

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

       При успешном выполнении mq_open()  возвращает файловый дескриптор  очереди  для  использования  в  других
       функциях работы с очередями сообщений. При ошибке mq_open() возвращает (mqd_t) -1, а в errno записывается
       код ошибки.

ОШИБКИ

       EACCES Очередь существует, но вызывающий не имеет прав для её открытия с заданным в mode режиме.

       EACCES Поле name содержит больше чем одну косую черту.

       EEXIST В oflag указаны O_CREAT и O_EXCL, но очередь name уже существует.

       EINVAL Параметр name не соответствует формату, описанному в mq_overview(7).

       EINVAL В oflag указан O_CREAT и attr не равно NULL, но в attr->mq_maxmsg или attr->mq_msqsize  содержится
              некорректное  значение.  Оба  этих  поля  должны быть больше нуля. Если процесс без прав (не имеет
              мандата CAP_SYS_RESOURCE), то attr->mq_maxmsg должно быть меньше или равно ограничению  msg_max  и
              attr->mq_msgsize   должно   быть  меньше  или  равно  ограничению  msgsize_max.  Также,  даже  для
              привилегированных процессов, значение attr->mq_maxmsg не  должно  превышать  ограничения  HARD_MAX
              (описание ограничений смотрите в mq_overview(7)).

       EMFILE Было  достигнуто  ограничение  на  количество  открытых  дескрипторов  файлов и очередей сообщений
              (смотрите описание RLIMIT_NOFILE в getrlimit(2)).

       ENAMETOOLONG
              Слишком длинное значение аргумента name.

       ENFILE Достигнуто ограничение на общее количество открытых файлов в системе и очередей сообщений.

       ENOENT В oflag не указан O_CREAT и не существует очередь name.

       ENOENT В name есть только «/» и нет других символов.

       ENOMEM Недостаточно памяти.

       ENOSPC Недостаточно места для создания новой очереди сообщений. Вероятно, это произошло из-за ограничения
              queues_max; смотрите mq_overview(7).

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).
       ┌─────────────────────────────────────────────────────────────────────┬──────────────────────┬──────────┐
       │ ИнтерфейсАтрибутЗначение │
       ├─────────────────────────────────────────────────────────────────────┼──────────────────────┼──────────┤
       │ mq_open()                                                           │ Безвредность в нитях │ MT-Safe  │
       └─────────────────────────────────────────────────────────────────────┴──────────────────────┴──────────┘

ВЕРСИИ

   Отличия между библиотекой C и ядром
       Библиотечная функция mq_open() реализована поверх системного вызова с тем же именем. Библиотечная функция
       выполняет проверку того, что name начинается с косой черты (/) и выдаёт ошибку EINVAL, если это  не  так.
       Системный  вызов  ядра ожидает name без начальной косой черты, поэтому библиотечная функция C  передаёт в
       системный вызов name без начальной косой черты (т. е., name+1).

СТАНДАРТЫ

       POSIX.1-2008.

ИСТОРИЯ

       POSIX.1-2001.

ОШИБКИ

       Before Linux 2.6.14, the process umask was not applied to the permissions specified in mode.

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

       mq_close(3), mq_getattr(3), mq_notify(3), mq_receive(3), mq_send(3), mq_unlink(3), mq_overview(7)

ПЕРЕВОД

       Русский  перевод  этой   страницы   руководства   разработал(и)   aereiae   <aereiae@gmail.com>,   Alexey
       <a.chepugov@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>,
       Dmitry  Bolkhovskikh  <d20052005@yandex.ru>,  ITriskTI <ITriskTI@gmail.com>, Max Is <ismax799@gmail.com>,
       Yuri  Kozlov  <yuray@komyakino.ru>,  Иван  Павлов   <pavia00@gmail.com>,   Малянов   Евгений   Викторович
       <maljanow@outlook.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 г.                                       mq_open(3)