SEM_OPEN - Linux手册页
Linux程序员手册 第3部分
更新日期: 2020-08-13
名称
sem_open-初始化并打开一个命名信号量
语法
#include <fcntl.h> /* For O_* constants */ #include <sys/stat.h> /* For mode constants */ #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);
与-pthread链接。
说明
sem_open()创建一个新的POSIX信号量或打开一个现有的信号量。信号灯由名称标识。有关名称构造的详细信息,请参见sem_overview(7)。
oflag参数指定用于控制调用操作的标志。 (可以通过包含来获得标志值的定义。)如果在oflag中指定O_CREAT,则如果信号灯尚不存在,则会创建该信号灯。信号量的所有者(用户ID)设置为调用过程的有效用户ID。组所有权(组ID)设置为调用过程的有效组ID。如果在oflag中同时指定了O_CREAT和O_EXCL,则如果已经存在具有给定名称的信号灯,则将返回错误。
如果在oflag中指定O_CREAT,则必须提供两个附加参数。 mode参数指定要放置在新信号量上的权限,就像open(2)一样。 (可以通过包含。获得权限位的符号定义。)权限设置针对进程umask进行掩码。应该向将访问信号量的每个用户类别都授予读取和写入权限。 value参数指定新信号量的初始值。如果指定了O_CREAT,并且已经存在具有给定名称的信号灯,则将忽略mode和value。
返回值
成功后,sem_open()返回新信号量的地址。调用其他与信号量相关的函数时,将使用此地址。发生错误时,sem_open()返回SEM_FAILED,并设置errno来指示错误。
错误说明
- EACCES
- 信号灯存在,但是调用者没有打开它的权限。
- EEXIST
- O_CREAT和O_EXCL都在oflag中指定,但是已经存在具有该名称的信号灯。
- EINVAL
- 值大于SEM_VALUE_MAX。
- EINVAL
- 名称仅由" /"组成,后面没有其他字符。
- EMFILE
- 已达到打开文件描述符数量的每个进程限制。
- ENAMETOOLONG
- 名字太长。
- ENFILE
- 已达到系统范围内打开文件总数的限制。
- ENOENT
- 没有在oflag中指定O_CREAT标志,并且不存在具有该名称的信号灯;或者,已指定O_CREAT,但名称格式不正确。
- ENOMEM
- 内存不足。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
sem_open() | Thread safety | 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)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。