sem_open -
инициализирует
и
открывает
именованный
семафор
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 <
[email protected]>, Azamat Hackimov
<
[email protected]>, Hotellook, Nikita
<
[email protected]>, Spiros Georgaras <
[email protected]>, Vladislav
<
[email protected]>, Yuri Kozlov <
[email protected]>
и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]