11.2. Функция semget

We use cookies. Read the Privacy and Cookie Policy

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.

Данный текст является ознакомительным фрагментом.