Provided by: manpages-ru-dev_4.21.0-2_all bug

ИМЯ

       sem_open - инициализирует и открывает именованный семафор

LIBRARY

       POSIX threads library (libpthread, -lpthread)

СИНТАКСИС

       #include <fcntl.h>           /* константы O_* */
       #include <sys/stat.h>        /* константы для mode */
       #include <semaphore.h>

       sem_t *sem_open(const char *name, int oflag);
       sem_t *sem_open(const char *name, int oflag,
                       mode_t mode, unsigned int value);

ОПИСАНИЕ

       Функция  sem_open()  создаёт  новый  семафор  POSIX  или  открывает  существующий семафор.
       Семафору присваивается имя name. Подробней об устройстве name смотрите sem_overview(7).

       В аргументе oflag задаются флаги, которые управляют работой вызова  (определения  значений
       флагов  можно  получить  включив  <fcntl.h>).  Если  в  oflag  указано O_CREAT, то семафор
       создаётся, если ещё не существует. Владельцем (ID пользователя)  семафора  устанавливается
       эффективный   ID   пользователя   вызывающего  процесса.  Владельцем  группы  (ID  группы)
       устанавливается эффективный ID группы вызывающего процесса. Если в oflag указаны O_CREAT и
       O_EXCL одновременно и семафор с заданным name уже существует, то возвращается ошибка.

       Если  в  oflag  указано O_CREAT, то должны быть заданы ещё два аргумента. В аргументе mode
       задаются права для нового семафора, подобно open(2) (символические  определения  бит  прав
       можно  получить  включив  <sys/stat.h>). Настройки прав маскируются маской процесса. Права
       чтения и записи должны быть заданы для каждого класса пользователей, которым нужен  доступ
       к  семафору.  В  аргументе  value задаётся начальное значение нового семафора. Если указан
       O_CREAT и семафор с заданным name существует, то mode и value игнорируются.

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

       При  успешном  выполнении  sem_open()  возвращает  адрес  нового  семафора;   этот   адрес
       используется  при  вызове  других  функций, работающих с семафорами. При ошибке sem_open()
       возвращает SEM_FAILED, а в errno записывается номер ошибки.

ОШИБКИ

       EACCES Семафор существует, но вызывающий не имеет прав для его открытия.

       EEXIST В oflag указаны O_CREAT и O_EXCL, но семафор name уже существует.

       EINVAL Значение value было больше SEM_VALUE_MAX.

       EINVAL В name есть только «/», и нет других символов.

       EMFILE Было  достигнуто  ограничение  по  количеству  открытых  файловых  дескрипторов  на
              процесс.

       ENAMETOOLONG
              Слишком длинное значение аргумента name.

       ENFILE Достигнуто максимальное количество открытых файлов в системе.

       ENOENT В oflag не указан O_CREAT и семафор name не существует; или указан O_CREAT, но name
              указан в некорректной форме.

       ENOMEM Недостаточно памяти.

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).

       ┌───────────────────────────────────────────────────────┬──────────────────────┬──────────┐
       │ИнтерфейсАтрибутЗначение │
       ├───────────────────────────────────────────────────────┼──────────────────────┼──────────┤
       │sem_open()                                             │ Безвредность в нитях │ MT-Safe  │
       └───────────────────────────────────────────────────────┴──────────────────────┴──────────┘

СТАНДАРТЫ

       POSIX.1-2001, POSIX.1-2008.

СМ. ТАКЖЕ

       sem_close(3), sem_getvalue(3), sem_post(3), sem_unlink(3), sem_wait(3), sem_overview(7)

ПЕРЕВОД

       Русский   перевод   этой   страницы   руководства    был    сделан    Alexander    Golubev
       <fatzer2@gmail.com>,   Azamat   Hackimov  <azamat.hackimov@gmail.com>,  Hotellook,  Nikita
       <zxcvbnm3230@mail.ru>,       Spiros       Georgaras       <sng@hellug.gr>,       Vladislav
       <ivladislavefimov@gmail.com>,    Yuri    Kozlov   <yuray@komyakino.ru>   и   Иван   Павлов
       <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если вы обнаружите ошибки в переводе  этой  страницы  руководства,  пожалуйста,  отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.