SEM_OPEN - Linux手册页

时间:2019-08-20 18:01:15  来源:igfitidea点击:

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)。

InterfaceAttributeValue
sem_open()Thread safetyMT-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/