MQ_OPEN(3) | Руководство программиста Linux | MQ_OPEN(3) |
mq_open - открывает очередь сообщений
#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);
Компонуется при указании параметра -lrt.
Функция mq_open() создает новую очередь сообщений POSIX или открывает существующую очередь. Очередь опознаётся по имени name. Для получения дополнительной информации о создании имени name, смотрите mq_overview(7).
В параметре oflag задаются флаги, которые управляют работой вызова (значения флагов могут быть получены при включении <fcntl.h>). Поместить в параметр oflag можно только один из ниже приведенных флагов:
Также в oflag можно добавить ноль и более флагов, объединённых через ИЛИ:
Если в 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 записывается код ошибки.
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение |
mq_open() | Безвредность в нитях | MT-Safe |
POSIX.1-2001, POSIX.1-2008.
Библиотечная функция mq_open() реализована поверх системного вызова с тем же именем. Библиотечная функция выполняет проверку того, что name начинается с косой черты (/) и выдаёт ошибку EINVAL, если это не так. Системный вызов ядра ожидает name без начальной косой черты, поэтому библиотечная функция C передаёт в системный вызов name без начальной косой черты (т. е., name+1).
В ядрах до версии 2.6.14, значение umask процесса не накладывалось на права, указанные в mode.
mq_close(3), mq_getattr(3), mq_notify(3), mq_receive(3), mq_send(3), mq_unlink(3), mq_overview(7)
2017-09-15 | Linux |