Главная » 2017 » Ноябрь » 21 » man 2 mq_open
00:58
man 2 mq_open

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


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
можно только один из ниже приведенных флагов:

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, задаётся максимальное
};

В функции 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).

┌──────────┬──────────────────────┬──────────┐
│Интерфейс │ Атрибут │ Значение │
├──────────┼──────────────────────┼──────────┤
черты (/) и выдаёт ошибку 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)



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 90 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar