Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

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

БИБЛИОТЕКА

       Библиотека потоков POSIX (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-2008.

ИСТОРИЯ

       POSIX.1-2001.

СМОТРИТЕ ТАКЖЕ

       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> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот перевод является свободной программной документацией; он распространяется на условиях  общедоступной
       лицензии  GNU  (GNU  General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите  об  этом
       разработчику(ам)   по   его(их)  адресу(ам)  электронной  почты  или  по  адресу  списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                      sem_open(3)