SEMGET(2) SEMGET(2)
НАЗВАНИЕ
semget - получение идентификатора множества семафоров
СИНТАКСИС
#include
#include
#include
int semget (key, nsems, semflg)
key_t key;
int nsems, semflg;
ОПИСАНИЕ
Системный вызов semget возвращает идентификатор мно-
жества семафоров, ассоциированный с ключом key.
Идентификатор и ассоциированные с ним структура данных
и множество из nsems семафоров [см. intro(2)] создаются
для ключа key в следующих случаях:
1. Значение аргумента key равно IPC_PRIVATE.
2. Ключ key еще не имеет ассоциированного с ним иден-
тификатора множества семафоров и выражение (semflg
& IPC_CREAT) истинно.
При создании структуры данных, ассоциированной с новым
идентификатором множества семафоров, выполняются следу-
ющие инициализирующие действия:
1. Значения полей sem_perm.cuid, sem_perm.uid,
sem_perm.cgid и sem_perm.gid устанавливаются рав-
ными действующему идентификатору пользователя и,
соответственно, действующему идентификатору группы
вызывающего процесса.
2. Младшие 9 бит поля sem_perm.mode устанавливаются
равными 9 младшим битам аргумента semflg.
3. Значение поля sem_nsems устанавливается равным
значению аргумента nsems.
4. Значение поля sem_otime устанавливается равным 0 и
значение поля sem_ctime устанавливается равным те-
кущему времени.
Системный вызов semget завершается неудачей, если вы-
полнено хотя бы одно из следующих условий:
[EINVAL] Значение аргумента nsems меньше или равно
0, или больше максимально допустимого в
системе.
[EACCES] Для ключа key уже существует идентификатор
множества семафоров, но не могут быть пре-
доставлены права доступа [см. intro(2)],
определенные в 9 младших битах аргумента
semflg.
[EINVAL] Для ключа key уже существует идентификатор
множества семафоров, но количество семафо-
ров в ассоциированном множестве меньше зна-
чения nsems и значение nsems не равно 0.
[ENOENT] Для ключа key не существует идентификатор
множества семафоров и выражение (semflg &
IPC_CREAT) ложно.
[ENOSPC] Идентификатор множества семафоров должен
быть создан, но тогда будет превышено мак-
симально допустимое количество идентифика-
торов в системе.
[ENOSPC] Идентификатор множества семафоров должен
быть создан, но тогда будет превышено мак-
симально допустимое количество семафоров в
системе.
[EEXIST] Для ключа key уже существует идентификатор
множества семафоров и выражение ((semflg &
IPC_CREAT) & (semflg & IPC_EXCL)) истинно.
СМ. ТАКЖЕ
intro(2), semctl(2), semop(2).
ДИАГНОСТИКА
При успешном завершении системного вызова возвращается
неотрицательное целое число - идентификатор множества
семафоров. В случае ошибки возвращается -1, а перемен-
ной errno присваивается код ошибки.
|