.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (C) 2006 Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH mq_open 3 "20 июля 2023 г." "Linux man\-pages 6.05.01" .SH ИМЯ mq_open \- открывает очередь сообщений .SH LIBRARY Real\-time library (\fIlibrt\fP, \fI\-lrt\fP) .SH СИНТАКСИС .nf \fB#include \fP /* Постоянные вида O_* */ \fB#include \fP /* Постоянные для mode */ \fB#include \fP .PP \fBmqd_t mq_open(const char *\fP\fIname\fP\fB, int \fP\fIoflag\fP\fB);\fP \fBmqd_t mq_open(const char *\fP\fIname\fP\fB, int \fP\fIoflag\fP\fB, mode_t \fP\fImode\fP\fB,\fP \fB struct mq_attr *\fP\fIattr\fP\fB);\fP .fi .SH ОПИСАНИЕ Функция \fBmq_open\fP() создает новую очередь сообщений POSIX или открывает существующую очередь. Очередь опознаётся по имени \fIname\fP. Для получения дополнительной информации о создании имени \fIname\fP, смотрите \fBmq_overview\fP(7). .PP В параметре \fIoflag\fP задаются флаги, которые управляют работой вызова (значения флагов могут быть получены при включении \fI\fP). Поместить в параметр \fIoflag\fP можно только один из ниже приведенных флагов: .TP \fBO_RDONLY\fP Открыть очередь только для получения сообщений. .TP \fBO_WRONLY\fP Открыть очередь только для отправки сообщений. .TP \fBO_RDWR\fP Открыть очередь для отправки и получения сообщений. .PP Также в \fIoflag\fP можно добавить ноль и более флагов, объединённых через ИЛИ: .TP \fBO_CLOEXEC\fP (начиная с Linux 2.6.26) .\" commit 269f21344b23e552c21c9e2d7ca258479dcd7a0a Установить флаг close\-on\-exec на файловом дескрипторе очереди сообщений. Описание полезности этого флага смотрите в \fBopen\fP(2). .TP \fBO_CREAT\fP .\" In reality the filesystem IDs are used on Linux. Создать очередь сообщений, если она не существует. Владельцем (ID пользователя) очереди сообщений назначается эффективный ID пользователя вызывающего процесса. Владельцем\-группой (ID группы) назначается эффективный ID группы вызывающего процесса. .TP \fBO_EXCL\fP Если в поле \fIoflag\fP выставлен флаг \fBO_CREAT\fP и очередь с заданным именем \fIname\fP уже существует, то завершить вызов ошибкой \fBEEXIST\fP. .TP \fBO_NONBLOCK\fP Открыть очередь в неблокирующем режиме. При обстоятельствах, из\-за которых \fBmq_receive\fP(3) и \fBmq_send\fP(3), обычно, блокируются, теперь эти функции будут завершаться ошибкой \fBEAGAIN\fP. .PP Если в \fIoflag\fP указан \fBO_CREAT\fP, требуется задать два дополнительных аргумента. В аргументе \fImode\fP задаются права доступа к новой очереди, как для \fBopen\fP(2) (символические определения бит прав можно получить, включив \fI\fP). В настройках прав учитывается umask процесса. .PP В полях структуры \fIstruct mq_attr\fP, на которую указывает \fIattr\fP, задаётся максимальное количество сообщений и максимальный размер сообщений, разрешённых в очереди. Эта структура определена следующим образом: .PP .in +4n .EX struct mq_attr { long mq_flags; /* флаги (игнорируются в mq_open()) */ long mq_maxmsg; /* макс. кол\-во сообщений в очереди */ long mq_msgsize; /* макс. размер сообщения (в байтах) */ long mq_curmsgs; /* кол\-во сообщений в очереди в данный момент (игнорируется в mq_open()) */ }; .EE .in .PP В функции \fBmq_open\fP() используются только поля \fImq_maxmsg\fP и \fImq_msgsize\fP; остальные значения полей игнорируются. .PP Если \fIattr\fP равно NULL, то очередь создаётся с атрибутами по умолчанию, зависящими от реализации. Начиная с Linux 3.5, для управления атрибутами по умолчанию можно управлять через два файла в \fI/proc\fP; подробности смотрите в \fBmq_overview\fP(7). .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" При успешном выполнении \fBmq_open\fP() возвращает файловый дескриптор очереди для использования в других функциях работы с очередями сообщений. При ошибке \fBmq_open\fP() возвращает \fI(mqd_t)\ \-1\fP, а в \fIerrno\fP записывается код ошибки. .SH ОШИБКИ .TP \fBEACCES\fP Очередь существует, но вызывающий не имеет прав для её открытия с заданным в \fImode\fP режиме. .TP \fBEACCES\fP .\" Note that this isn't consistent with the same case for sem_open() Поле \fIname\fP содержит больше чем одну косую черту. .TP \fBEEXIST\fP В \fIoflag\fP указаны \fBO_CREAT\fP и \fBO_EXCL\fP, но очередь \fIname\fP уже существует. .TP \fBEINVAL\fP .\" glibc checks whether the name starts with a "/" and if not, .\" gives this error Параметр \fIname\fP не соответствует формату, описанному в \fBmq_overview\fP(7). .TP \fBEINVAL\fP В \fIoflag\fP указан \fBO_CREAT\fP и \fIattr\fP не равно NULL, но в \fIattr\->mq_maxmsg\fP или \fIattr\->mq_msqsize\fP содержится некорректное значение. Оба этих поля должны быть больше нуля. Если процесс без прав (не имеет мандата \fBCAP_SYS_RESOURCE\fP), то \fIattr\->mq_maxmsg\fP должно быть меньше или равно ограничению \fImsg_max\fP и \fIattr\->mq_msgsize\fP должно быть меньше или равно ограничению \fImsgsize_max\fP. Также, даже для привилегированных процессов, значение \fIattr\->mq_maxmsg\fP не должно превышать ограничения \fBHARD_MAX\fP (описание ограничений смотрите в \fBmq_overview\fP(7)). .TP \fBEMFILE\fP Было достигнуто ограничение на количество открытых дескрипторов файлов и очередей сообщений (смотрите описание \fBRLIMIT_NOFILE\fP в \fBgetrlimit\fP(2)). .TP \fBENAMETOOLONG\fP Слишком длинное значение аргумента \fIname\fP. .TP \fBENFILE\fP Достигнуто ограничение на общее количество открытых файлов в системе и очередей сообщений. .TP \fBENOENT\fP В \fIoflag\fP не указан \fBO_CREAT\fP и не существует очередь \fIname\fP. .TP \fBENOENT\fP .\" Note that this isn't consistent with the same case for sem_open() В \fIname\fP есть только «/» и нет других символов. .TP \fBENOMEM\fP Недостаточно памяти. .TP \fBENOSPC\fP Недостаточно места для создания новой очереди сообщений. Вероятно, это произошло из\-за ограничения \fIqueues_max\fP; смотрите \fBmq_overview\fP(7). .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Интерфейс Атрибут Значение T{ .na .nh \fBmq_open\fP() T} Безвредность в нитях MT\-Safe .TE .sp 1 .SH ВЕРСИИ .SS "Отличия между библиотекой C и ядром" Библиотечная функция \fBmq_open\fP() реализована поверх системного вызова с тем же именем. Библиотечная функция выполняет проверку того, что \fIname\fP начинается с косой черты (/) и выдаёт ошибку \fBEINVAL\fP, если это не так. Системный вызов ядра ожидает \fIname\fP без начальной косой черты, поэтому библиотечная функция C передаёт в системный вызов \fIname\fP без начальной косой черты (т. е., \fIname+1\fP). .SH СТАНДАРТЫ POSIX.1\-2008. .SH ИСТОРИЯ POSIX.1\-2001. .SH ДЕФЕКТЫ Before Linux 2.6.14, the process umask was not applied to the permissions specified in \fImode\fP. .SH "СМ. ТАКЖЕ" \fBmq_close\fP(3), \fBmq_getattr\fP(3), \fBmq_notify\fP(3), \fBmq_receive\fP(3), \fBmq_send\fP(3), \fBmq_unlink\fP(3), \fBmq_overview\fP(7) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан aereiae , Alexey , Azamat Hackimov , Dmitriy S. Seregin , Dmitry Bolkhovskikh , ITriskTI , Max Is , Yuri Kozlov , Иван Павлов и Малянов Евгений Викторович . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .