Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:sem_打开标签_C_Header Files_Semaphore - Fatal编程技术网

C:sem_打开标签

C:sem_打开标签,c,header-files,semaphore,C,Header Files,Semaphore,我试图学习如何使用信号量,但我对它们的一般用法有点困惑。我在试着理解一个例子 以下是第一个进程中信号量的初始化: sem_t *s1 = sem_open(SEM_1, O_CREAT | O_EXCL, 0600, 1); sem_t *s1 = sem_open(SEM_1, 0); 其中,SEM_1是预定义的名称 我的问题从O|u create | O|u EXCL部分开始。我知道您在创建信号量时正在设置O_uu标志O_create应该创建一个信号量O_EXCL应使调用失败。我不确定的

我试图学习如何使用信号量,但我对它们的一般用法有点困惑。我在试着理解一个例子

以下是第一个进程中信号量的初始化:

sem_t *s1 = sem_open(SEM_1, O_CREAT | O_EXCL, 0600, 1);
sem_t *s1 = sem_open(SEM_1, 0);
其中,SEM_1是预定义的名称

我的问题从
O|u create | O|u EXCL
部分开始。我知道您在创建信号量时正在设置O_uu标志
O_create
应该创建一个信号量<如果已创建调用,则code>O_EXCL应使调用失败。我不确定的是它是如何在这里指定的。sem_open的手册页上写着:

“如果oflag中同时指定了O_CREAT和O_EXCL, 如果给定名称的信号量已经存在,则返回一个错误 存在。”

如果我理解正确的话,
O|u CREAT | O_EXCL
只是指定了这两者(按位或链接),对吗?那么,仅仅是O_EXCL的目的是什么呢

继续,我知道0600是权限,1是信号量值。然后在下一个过程中出现信号量:

sem_t *s1 = sem_open(SEM_1, O_CREAT | O_EXCL, 0600, 1);
sem_t *s1 = sem_open(SEM_1, 0);
在fcntl.h中查找0的定义会显示

#define O_RDONLY    00000000
#define O_RDONLY    00000000 
我想这里用的是。但是,既然我最终需要增加/减少信号量的值,那么这不是有点违背了信号量的目的吗

提前感谢您的帮助

如果我理解正确的话,
O|u CREAT | O_EXCL
只是 指定两者(按位或链接),对吗

那么,仅仅是O_EXCL的目的是什么呢

仅指定
O_exc
,即。E调用
sem\u open(sem\u 1,O\u EXCL)
,没有定义,也没有意义

然后在下一个过程中出现信号量:

sem_t *s1 = sem_open(SEM_1, O_CREAT | O_EXCL, 0600, 1);
sem_t *s1 = sem_open(SEM_1, 0);
sem_t *s1 = sem_open(SEM_1, 0); 
在fcntl.h中查找0的定义会显示

#define O_RDONLY    00000000
#define O_RDONLY    00000000 
我想这里用的是

你不应该做出毫无根据的假设。在
sem_open
手册中定义了lag参数的
含义,这是完全正确的。除了
O_create
O_EXCL
之外,没有其他标志-
0
只意味着没有给出这些标志