Прототип системного вызова
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int msgget(key_t key, int msgflg);
Описание системного вызова
Системный вызов msgget предназначен для выполнения операции доступа к очереди сообщений и, в случае ее успешного завершения, возврашает дескриптор System V IPC для этой очереди (целое неотрицательное число, однозначно характеризующее очередь сообщений внутри вычислительной системы и использующееся в дальнейшем для других операций с ней).
Параметр key является ключом System V IPC для очереди сообщений, т.е. фактически ее именем из пространства имен System V IPC. В качестве значения этого параметра может быть использовано значение ключа, полученное с помощью функции ftok(), или специальное значение IPC_PRIVATE. Использование значения IPC_PRIVATE всегда приводит к попытке создания новой очереди сообщений с ключом, который не совпадает со значением ключа ни одной из уже существующей очередей и который не может быть получен с помощью функции ftok() ни при одной комбинации ее параметров.
Параметр msgflg - флаги - играет роль только при создании новой очереди сообщений и определяет права различных пользователей при доступе к очереди, а также необходимость создания новой очереди и поведение системного вызова при попытке создания. Он является некоторой комбинацией (с помощью операции побитовое или - "|") следующих предопределенных значений и восьмеричных прав доступа:
IPC_CREAT - если очередь для указанного ключа не существует, она должна быть создана.
IPC_EXCL - применяется совместно с флагом IPC_CREAT. При совместном их использовании и существовании очереди с указанным ключом, доступ к очереди не производится и констатируется ошибочная ситуация, при этом переменная errno, описанная в файле errno.h, примет значение EEXIST. 0400 - Разрешено чтение для пользователя, создавшего очередь. 0200 - Разрешена запись для пользователя, создавшего очередь. 0040 - Разрешено чтение для группы пользователя, создавшего очередь. 0020 - Разрешена запись для группы пользователя, создавшего очередь. 0004 - Разрешено чтение для всех остальных пользователей 0002 - Разрешена запись для всех остальных пользователей
Очередь сообщений имеет ограничение по общему количеству хранимой информации, которое может быть изменено администратором системы. Текущее установленное значения ограничения можно узнать с помощью команды
ipcs -l
Возвращаемое значение
Системный вызов возвращает значение дескриптора System V IPC для очереди сообщений при нормальном завершении и значение -1 при возникновении ошибки.