Операционная система UNIX. Руководство программиста




Использование msgget


В статье msgget(2) Справочника программиста синтаксис данного системного вызова описан так:

#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h>

int msgget (key, msgflg) key_t key; int msgflg;

Тип key_t описан во включаемом файле <sys/types.h> при помощи typedef как целый тип.

Целочисленное значение, возвращаемое в случае успешного завершения системного вызова, есть идентификатор очереди сообщений (msqid). В случае неудачи результат равен -1.

Новый идентификатор msqid, очередь сообщений и ассоциированная с ней структура данных выделяются в каждом из двух случаев:

  • Значение ключа key равно IPC_PRIVATE.
  • Ключ key еще не имеет ассоциированного с ним идентификатора очереди сообщений и выражение (msgflg & IPC_CREAT) истинно.

Целое число, передаваемое в качестве аргумента msgflg, удобно рассматривать как восьмеричное. Оно задает

  • Права на выполнение операций.
  • Флаги.

Права на выполнение операций есть права на чтение из очереди и запись в нее (то есть на прием/посылку сообщений) для владельца, членов группы и прочих пользователей. В следующей таблице сведены возможные элементарные права и соответствующие им восьмеричные значения:

Права на операции   Восьмеричное значение 
 Чтение для владельца  0400
 Запись для владельца  0200
 Чтение для группы  0040
 Запись для группы  0020
 Чтение для остальных  0004
 Запись для остальных  0002

В каждом конкретном случае нужная комбинация прав задается как результат побитного ИЛИ значений, соответствующих элементарным правам. Так, правам на чтение/запись для владельца и на чтение для членов группы и прочих пользователей соответствует восьмеричное число 0644. Отметим полную аналогию с правами доступа к файлам.

Флаги определены во включаемом файле <sys/ipc.h>. В следующей таблице сведены мнемонические имена флагов и соответствующие им восьмеричные значения:

 Флаг   Восьмеричное значение 
 IPC_CREAT   0001000 
 IPC_EXCL   0002000 
<


Содержание  Назад  Вперед