Man page - msgget(2)

Packages contains this manual

Available languages:

en fr es pl ja ru ro

Manual

msgget

НАИМЕНОВАНИЕ
БИБЛИОТЕКА
ОБЗОР
ОПИСАНИЕ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
ОШИБКИ
СТАНДАРТЫ
ИСТОРИЯ
Linux
ПРИМЕЧАНИЯ
ОШИБКИ
СМОТРИТЕ ТАКЖЕ
ПЕРЕВОД

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

msgget - возвращает идентификатор очереди сообщений System V

БИБЛИОТЕКА

Стандартная библиотека языка C ( libc , -lc )

ОБЗОР

#include <sys/msg.h>

int msgget(key_t key , int msgflg );

ОПИСАНИЕ

Системный вызов msgget () возвращает идентификатор очереди сообщений System V, связанный со значением аргумента key . Его можно использовать для получения идентификатора уже созданной очереди сообщений (если msgflg равно нулю и значение key не равно IPC_PRIVATE ) или для создания новой.

Новая очередь сообщений создаётся, если значение key равно IPC_PRIVATE , или если key не равно IPC_PRIVATE ,не существует ни одной очереди сообщений с заданным ключом key и в поле msgflg указан флаг IPC_CREAT .

Если в msgflg одновременно заданы IPC_CREAT и IPC_EXCL и с таким key очередь сообщений уже существует, то msgget () завершится с ошибкой и errno будет равно EEXIST (тот же эффект как для комбинации O_CREAT | O_EXCL у open (2)).

При создании права доступа к очереди сообщений определяются младшими битами параметра msgflg . Эти биты прав имеют тот же формат и значение, что и права в аргументе mode у вызова open (2) (право на исполнение не используется).

Если создаётся новая очередь сообщений, то этот системный вызов инициализирует структуру данных msqid_ds (смотрите msgctl (2)) следующим образом:

Полям msg_perm.cuid и msg_perm.uid присваивается эффективный идентификатор пользователя вызывающего процесса.

Полям msg_perm.cgid и msg_perm.gid присваивается эффективный идентификатор группы вызывающего процесса.

Младшим 9 битам msg_perm.mode присваивается значение младших 9 битов msgflg .

msg_qnum , msg_lspid , msg_lrpid , msg_stime и msg_rtime присваивается 0.

В поле msg_ctime записывается текущее время.

В поле msg_qbytes записывается системное ограничение MSGMNB .

Если очередь сообщений уже существует, то проверяются права доступа к ней и не помечена ли она для удаления.

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

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

ОШИБКИ

EACCES

Очередь сообщений для ключа key существует, но вызывающий процесс не имеет прав доступа к ней и не имеет мандата CAP_IPC_OWNER , который управляет его пространством имён IPC.

EEXIST

В msgflg указаны IPC_CREAT и IPC_EXCL , но очередь сообщений уже существует для key .

ENOENT

Для ключа key не существует очереди сообщений, но в msgflg нет флага IPC_CREAT .

ENOMEM

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

ENOSPC

Очередь сообщений необходимо создать, но лимит, определяющий количество очередей сообщений ( MSGMNI ), уже достигнут.

СТАНДАРТЫ

POSIX.1-2008.

ИСТОРИЯ

POSIX.1-2001, SVr4.

Linux

До Linux 2.3.20 Linux возвращал EIDRM для msgget () в очереди сообщений, запланированных для удаления.

ПРИМЕЧАНИЯ

IPC_PRIVATE является не полем с флагами, а имеет тип key_t . Если при работе с key используется это специальное значение, то системный вызов игнорирует всё, кроме 9-ти младших битов в msgflg и создаёт новую очередь сообщений (если это возможно).

На вызов msgget () влияет системное ограничение по очередям сообщений:

MSGMNI

Системное ограничение на максимальное количество очередей сообщений. В системах Linux до версии 3.19, значением по умолчанию этого ограничения рассчитывалось на основе формулы зависящей от доступной системной памяти. Начиная с Linux 3.19, значение по умолчанию равно 32000. В Linux это ограничение можно прочитать и изменять через /proc/sys/kernel/msgmni ).

ОШИБКИ

Имя IPC_PRIVATE , возможно, было выбрано неудачно, IPC_NEW отражает смысл действия более ясно.

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

msgctl (2), msgrcv (2), msgsnd (2), ftok (3), capabilities (7), mq_overview (7), sysvipc (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 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков .