Для каждого ресурса система использует общую структуру типа struct ipc_perm, чтобы хранить информацию, необходимую для определения прав доступа при исполнении ipc-операции. Структура ipc_perm, заданная в файле системных заголовков <sys/ipc.h>, состоит из следующих полей:
ushort cuid;/* идентификатор пользователя-создателя */
ushort cgid;/* идентификатор группы-создателя */
ushort uid;/* идентификатор пользователя-владельца */
ushort gid;/* идентификатор группы-владельца */
ushort mode;/* права на чтение/запись */
Поле mode структуры ipc_perm определяет в своих младших 9-и битах права доступа процесса к ресурсу, вызывающему системную функцию ipc. Права определяются следующим образом:
0400 - Чтение пользователем.
0200 - Запись пользователем.
0040 - Чтение группой.
0020 - Запись группой.
0004 - Чтение прочими.
0002 - Запись прочими.
Биты 0100, 0010 и 0001 (права на исполнение) не используются. Более того, "Запись" на самом деле означает "Изменение" набора семафоров.
Тот же файл системных заголовков определяет и некоторые символьные константы:
IPC_CREAT - Создать ресурс, если такого ключа не существует.
IPC_EXCL - Вернуть ошибку, если ключ существует.
IPC_NOWAIT - Вернуть ошибку, если запрос требует ожидания.
IPC_PRIVATE - Индивидуальный ключ.
IPC_RMID - Удалить ресурс.
IPC_SET - Установить опции ресурса.
IPC_STAT - Получить опции ресурса.
Заметьте, что IPC_PRIVATE имеет тип key_t, а остальные символьные константы являются флагами, которые можно использовать в качестве операнда функции логического сложения с переменной типа int.