Системный вызов semget

Прототип системного вызова

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

int semget(key_t key, int nsems, int semflg);

Описание системного вызова

Системный вызов semget предназначен для выполнения операции доступа к массиву IPC семафоров и, в случае ее успешного завершения, возврашает дескриптор System V IPC для этого массива (целое неотрицательное число, однозначно характеризующее массив семафоров внутри вычислительной системы и использующееся в дальнейшем для других операций с ним).

Параметр key является ключом System V IPC для массива семафоров, т.е. фактически его именем из пространства имен System V IPC. В качестве значения этого параметра может быть использовано значение ключа, полученное с помощью функции ftok(), или специальное значение IPC_PRIVATE. Использование значения IPC_PRIVATE всегда приводит к попытке создания нового массива семафоров с ключом, который не совпадает со значением ключа ни одного из уже существующих массивов и который не может быть получен с помощью функции ftok() ни при одной комбинации ее параметров.
Параметр nsems определяет количество семафоров в создаваемом или уже существующем массиве. В случае, если массив с указанным ключом уже существует, но его размер не совпадает с указанным в параметре nsems, констатируется возникновение ошибки.

Параметр semflg - флаги - играет роль только при создании нового массива семафоров и определяет права различных пользователей при доступе к массиву, а также необходимость создания нового массива и поведение системного вызова при попытке создания. Он является некоторой комбинацией (с помощью операции побитовое или - "|") следующих предопределенных значений и восьмеричных прав доступа:

IPC_CREAT

- если массив для указанного ключа не существует, он должен быть создан.

IPC_EXCL - применяется совместно с флагом IPC_CREAT. При совместном их использовании и существовании массива с указанным ключом, доступ к массиву не производится и констатируется ошибочная ситуация, при этом переменная errno, описанная в файле errno.h, примет значение EEXIST.
0400 - Разрешено чтение для пользователя, создавшего массив.
0200 - Разрешена запись для пользователя, создавшего массив.
0040 - Разрешено чтение для группы пользователя, создавшего массив.
0020 - Разрешена запись для группы пользователя, создавшего массив.
0004 - Разрешено чтение для всех остальных пользователей
0002 - Разрешена запись для всех остальных пользователей

Вновь созданные семафоры инициируются нулевым значением.

Возвращаемое значение

Системный вызов возвращает значение дескриптора System V IPC для массива семафоров при нормальном завершении и значение -1 при возникновении ошибки.