ВУЗ:
Составители:
249
int semid = semget (key_t key, int count, int flag)
параметрами которого является ключ или уникальное имя сегмента
(key), набора семафоров и дополнительные флаги (flag), определенные в
<sys/ipc.h>, число семафоров в наборе семафоров (count), обладающих
одним и тем же ключом. Системный вызов возвращает идентификатор
набора семафоров semid. Живучесть такого семафора определяется жи-
вучестью ядра, т. е. объект семафор будет уничтожен тогда и только то-
гда, когда произойдет перезагрузка ядра либо его принудительно удалят.
После вызова semget индивидуальный семафор идентифицируется иден-
тификатором набора семафоров и номером семафора в этом наборе.
Флаги системного вызова semget приведены ниже в таблице.
Таблица 4.1
Флаги системного вызова semge
Флаг
Описание
IPC_CREAT
Вызов semget создает новый семафор для данного
ключа. Если флаг IPC_CREAT не задан, а набор се-
мафоров с указанным ключом уже существует, то
обращающийся процесс получит идентификатор
существующего набора семафоров
IPC_EXLC
Флаг IPC_EXLC вместе с флагом IPC_CREAT пред-
назначен для создания (и только для создания)
набора семафоров. Если набор семафоров уже су-
ществует, semget возвратит -1, а системная пере-
менная errno будет содержать значение EEXIST
Младшие 9 бит флага задают права доступа к набору семафоров
(табл. 4.2).
Таблица 4.2
Константы режима доступа при создании нового объекта IPC
Константа
Описание
S_IRUSR
Владелец – чтение
S_IWUSR
Владелец – запись
S_IRGRP
Группа – чтение
S_IWGRP
Группа – запись
S_IROTH
Прочие – чтение
S_IWOTH
Прочие – запись
Таким образом, флаг создания семафора можно указать так:
int flag = S_IRUSR | S_IWUSR | S_IRGRP | IPC_CREAT;
Системный вызов semctl имеет формат
int semctl (int semid, int sem_num, int command, union
semun arg)
Страницы
- « первая
- ‹ предыдущая
- …
- 247
- 248
- 249
- 250
- 251
- …
- следующая ›
- последняя »
