6.2. Функция msgget
Создать новую очередь сообщений или получить доступ к существующей можно с помощью функции msgget:
#include
int msgget(key_t key, int oflag);
/* Возвращает неотрицательный идентификатор в случае успешного завершения, –1 в случае ошибки */
Возвращаемое значение представляет собой целочисленный идентификатор, используемый тремя другими функциями msg для обращения к данной очереди. Идентификатор вычисляется на основе указанного ключа, который может быть получен с помощью функции ftok или может представлять собой константу IPC_PRIVATE, как показано на рис. 3.1.
Флаг oflag представляет собой комбинацию разрешений чтения-записи, показанную в табл. 3.3. К разрешениям можно добавить флаги IPC_CREAT или IPC_CREAT | IPC_EXCL с помощью логического сложения, как уже говорилось в связи с рис. 3.2.
При создании новой очереди сообщений инициализируются следующие поля структуры msqid_ds:
полям uid и cuid структуры msg_perm присваивается значение действующего идентификатора пользователя вызвавшего процесса, а полям gid и cgid — действующего идентификатора группы;
разрешения чтения-записи, указанные в oflag, помещаются в msg_perm.mode;
значения msg_qnum, msg_lspid, msg_lrpid, msg_stime и msg_rtime устанавливаются в 0;
в msg_ctime записывается текущее время;
в msg_qbytes помещается системное ограничение на размер очереди.