Provided by: manpages-ru-dev_4.19.0-7_all bug

ИМЯ

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

LIBRARY

       Standard C library (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.

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

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

       On success, msgget()  returns the message queue identifier (a  nonnegative  integer).   On
       failure, -1 is returned, and errno is set to indicate the error.

ОШИБКИ

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

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

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

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

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

СТАНДАРТЫ

       POSIX.1-2001, POSIX.1-2008, SVr4.

ЗАМЕЧАНИЯ

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

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

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

   Замечания, касающиеся Linux
       Until  Linux 2.3.20, Linux would return EIDRM for a msgget()  on a message queue scheduled
       for deletion.

ДЕФЕКТЫ

       Имя 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>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.