Provided by: manpages-ru-dev_4.26.0-1_all 

НАИМЕНОВАНИЕ
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)