通常,位于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。

10-08 06:21