通常,位于sys / types.h文件中的某些常量标志值将作为第三个参数传递给semget()
函数。但是,为我们提供给项目的一段代码包含这样的semget()
函数调用:sem_id = semget(SEMKEY, 1, 0) // accessing pre-defined semaphore
semid是全局变量,而SEMKEY是常量。
将零传递给semflg值是什么意思?我们能否说在访问先前定义的信号量时,将semflg参数设置为零?
最佳答案
不完全是因为即使未设置IPC_CREAT
也可能会设置其他标志,但是这毫无用处。 POSIX只是说(关于开放):
信号量标识符及其关联的semid_ds数据结构和
其相关联的nsems信号集(请参见参考资料)已创建
如果满足以下条件之一,则为key:
参数键等于IPC_PRIVATE。
参数键还没有信号灯标识符
与之相关联并且(semflg&IPC_CREAT)为非零。
因此,当然,semflg = 0表示没有创建。但是没有创建并不意味着semflg = 0。