SEMGET(2)
НАЗВАНИЕ
semget - получение идентификатора множества семафоров
СИНТАКСИС
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int semget (key, nsems, semflg)
key_t key;
int nsems, semflg;
ОПИСАНИЕ
Системный вызов semget возвращает идентификатор множества семафоров, ассоциированный с ключом key.
Идентификатор и ассоциированные с ним структура данных
и множество из nsems семафоров [см. intro(2)] создаются
для ключа key в следующих случаях:
- Значение аргумента key равно IPC_PRIVATE.
- Ключ key еще не имеет ассоциированного с ним идентификатора множества семафоров и выражение (semflg
& IPC_CREAT) истинно.
При создании структуры данных, ассоциированной с новым
идентификатором множества семафоров, выполняются следующие инициализирующие действия:
- Значения полей sem_perm.cuid, sem_perm.uid,
sem_perm.cgid и sem_perm.gid устанавливаются равными действующему идентификатору пользователя и,
соответственно, действующему идентификатору группы
вызывающего процесса.
- Младшие 9 бит поля sem_perm.mode устанавливаются
равными 9 младшим битам аргумента semflg.
- Значение поля sem_nsems устанавливается равным
значению аргумента nsems.
- Значение поля 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 присваивается код ошибки.