11.2. Функция semget
11.2. Функция semget
Функция semget создает набор семафоров или обеспечивает доступ к существующему.
#include <sys/sem.h>
int semget(key_t key, int nsems, int oflag);
/* Возвращает неотрицательный идентификатор в случае успешного завершения, –1 – в случае ошибки */
Эта функция возвращает целое значение, называемое идентификатором семафора, которое затем используется при вызове функций semop и semctl.
Аргумент nsems задает количество семафоров в наборе. Если мы не создаем новый набор, а устанавливаем доступ к существующему, этот аргумент может быть нулевым. Количество семафоров в уже созданном наборе изменить нельзя.
Аргумент oflag представляет собой комбинацию констант SEM_R и SEM_A из табл. 3.3. Здесь R обозначает Read (чтение), а А — Alter (изменение). К этим константам можно логически прибавить IPC_CREAT или IPC_CREAT | IPC_EXCL, о чем мы уже говорили в связи с рис. 3.2.
При создании нового семафора инициализируются следующие поля структуры semid_ds:
? поля uid и cuid структуры sem_perm устанавливаются равными действующему идентификатору пользователя процесса, а поля guid и cgid устанавливаются равными действующему идентификатору группы процесса;
? биты разрешений чтения-записи аргумента oflag сохраняются в sem_perm.mode;
? поле sem_otime устанавливается в 0, а поле sem_ctime устанавливается равным текущему времени;
? значение sem_nsems устанавливается равным nsems;
? структуры sem для каждого из семафоров набора не инициализируются. Это происходит лишь при вызове semctl с командами SETVAL или SETALL.
Данный текст является ознакомительным фрагментом.