The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

semget (2)
  • semget (2) ( Solaris man: Системные вызовы )
  • semget (2) ( FreeBSD man: Системные вызовы )
  • >> semget (2) ( Русские man: Системные вызовы )
  • semget (2) ( Linux man: Системные вызовы )
  • semget (3) ( POSIX man: Библиотечные вызовы )
  •  

    НАЗВАНИЕ

    semget - считывает идентификатор набора семафоров  

    СИНТАКСИС

    #include <sys/types.h>
    #include <sys/ipc.h>
    #include <sys/sem.h>
    

    int semget(key_t key, int nsems, int semflg);  

    ОПИСАНИЕ

    Системный вызов возвращает идентификатор набора семафоров, связанный с аргументом key. Создается новый набор из семафоров nsems , если значение key равно IPC_PRIVATE или c ключом key не связано ни одного существующего набора семафора, а выражение semflg & IPC_CREAT истинно.

    Наличие в semflg полей IPC_CREAT и IPC_EXCL играет ту же роль, что и наличие O_CREAT и O_EXCL в аргументе, заданном для режима системного вызова open(2). Например, фукция semget не выполняется, если semflg имеет флаги IPC_CREAT и IPC_EXCL, а набор семафоров уже существует для key.

    Младшие 9 битов аргумента semflg определяют права доступа (для владельца, группы и остальных) к набору семафоров.Эти биты имеют тот же формат и те же значения, что и аргумент mode в функциях open(2) или creat(2) (хотя права на запуск для семафоров не имеют значения, а права на запись приравниваются к правам на изменение значений семафора).

    При создании нового набора семафоров semget инициализирует связанную с семафором структуру данных semid_ds следующим образом:

    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 устанавливается на текущее время.

    Аргумент nsems может быть равен 0, если набор семафоров не создается. Иначе аргумент nsems должен быть больше, чем 0 и меньше, либо равен максимальному количеству семафоров в наборе (SEMMSL).

    Если набор семафоров уже существует, то проверяются права доступа.  

    ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ

    При удачном завершении возвращаемое значение будет представлять собой идентификатор набора семафоров (целое неотрицательное значение), иначе возвращается -1, а переменной errno присваивается номер ошибки.  

    НАЙДЕННЫЕ ОШИБКИ

    При ошибке errno будет присвоено одно из следующих значений:
    EACCES
    Набор семафоров существует для ключа key, но вызывающий процесс не имеет прав на доступ к набору.
    EEXIST
    Набор семафоров существует для ключа key, а в semflg не включены флаги IPC_CREAT и IPC_EXCL.
    ENOENT
    Набора семафоров для ключа key не существует, а в semflg не включен флаг IPC_CREAT.
    EINVAL
    Значение nsems меньше 0 или больше максимально возможного для набора количества семафоров (SEMMSL), или набор семафоров, соответствующий key уже существует и nsems больше, чем количество семафоров в этом наборе.
    ENOMEM
    Набор семафоров должен быть создан, но недостаточно памяти для создания новой структуры.
    ENOSPC
    Набор семафоров должен быть создан, но при этом будет превышен системный лимит количества наборов семафоров (SEMMNI) или системный лимит количества семафоров (SEMMNS).
     

    ЗАМЕЧАНИЯ

    IPC_PRIVATE- не поле флага, а тип key_t. Если key равно этому значению, то системный вызов игнорирует все, кроме 9-ти младших битов semflg и создает новый набор семафоров.

    Ниже приведены ограничения на ресурсы набора семафоров, оказывающие влияние на вызов semget.

    SEMMNI
    Максимальное количество наборов семафоров зависит от настроек системы.
    SEMMSL
    Максимальное количество семафоров на один идентификатор зависит от реализации (обычно оно равно 500).
    SEMMNS
    Максимальное количество семафоров зависит от настроек системы. Значение, превышающее SEMMSL * SEMMNI, не будет корректным.
     

    НАЙДЕННЫЕ ОШИБКИ

    Выбор имени IPC_PRIVATE был не очень удачен, IPC_NEW более понятнее обозначает свою функцию.

    Структура данных для каждого семафора в наборе не инициализируется системным вызовом. Для того, чтобы инициализировать эти структуры, Вам следует использовать вызов semctl(2), чтобы выполнить команды SETVAL или SETALL над набором семафоров.  

    СООТВЕТСТВИЕ СТАНДАРТАМ

    SVr4, SVID. SVr4 описывает дополнительные коды ошибок EFBIG, E2BIG, EAGAIN, ERANGE, EFAULT.  

    СМ. ТАКЖЕ

    ftok(3), ipc(5), semctl(2), semop(2)


     

    Index

    НАЗВАНИЕ
    СИНТАКСИС
    ОПИСАНИЕ
    ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
    НАЙДЕННЫЕ ОШИБКИ
    ЗАМЕЧАНИЯ
    НАЙДЕННЫЕ ОШИБКИ
    СООТВЕТСТВИЕ СТАНДАРТАМ
    СМ. ТАКЖЕ


    Поиск по тексту MAN-ов: 




    Спонсоры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2022 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру