【发布时间】:2015-12-27 17:08:00
【问题描述】:
我正在尝试学习如何使用信号量,但我对它们的一般用法有点困惑。我试图理解我给出的一个例子。
这是第一个过程中信号量的初始化:
sem_t *s1 = sem_open(SEM_1, O_CREAT | O_EXCL, 0600, 1);
其中 SEM_1 是预定义的名称。
我的问题从O_CREAT | O_EXCL 部分开始。我了解您在创建信号量时设置了 O_ 标志。 O_CREAT 应该创建一个信号量。 O_EXCL 如果已经创建,应该会导致调用失败。我不确定这里是如何指定的。 sem_open 的手册页说:
"如果oflag中同时指定了O_CREAT和O_EXCL, 如果已经有给定名称的信号量,则返回错误 存在。”
如果我理解正确,O_CREAT | O_EXCL 只是指定两者(按位或链接),对吗?那么 O_EXCL 的目的是什么?
继续,我知道 0600 是权限,1 是信号量值。然后是下一个流程中的信号量:
sem_t *s1 = sem_open(SEM_1, 0);
在 fcntl.h 中查找 0 的定义会发现
#define O_RDONLY 00000000
我假设在这里使用。不过,这不会有点违背信号量的目的吗,因为我最终需要增加/减少它的值?
提前感谢您的帮助。
【问题讨论】:
标签: c header-files semaphore