信号量未在C中正确创建

时间:2014-04-30 14:58:13

标签: c linux semaphore

我有以下问题。我想确保信号量被正确初始化,所以我把它放在那里,当发生错误时应该是真的。

if ((sem_t *semaphore = sem_open("/sem1", O_CREAT | O_EXCL, 0644, 1))
== SEM_FAILED) {handle error}

似乎如果发生错误,它可以正常工作 - 我可以处理该错误。但是当该条件为假时,那个信号量没有被创建,我认识到它,因为进程在sem_wait(信号量)上停止。 当我运行没有“if”的代码时,它工作正常,但我无法检测到任何错误。

我该怎么办?

2 个答案:

答案 0 :(得分:1)

看起来你在semaphore语句中声明(另一个?)if变量INSIDE。我认为这是编译,并且您已在其他地方声明semaphore

简短回答:从sem_t *声明中移除if

答案 1 :(得分:1)

您无法在if - 语句中定义变量。

试试这个:

sem_t * semaphore = NULL;
if (SEM_FAILED == (semaphore = sem_open("/sem1", O_CREAT | O_EXCL, 0644, 1))) 
{
  perror("sem_open() failed");
  /* handle error */
}

甚至更清楚:

sem_t * semaphore = sem_open("/sem1", O_CREAT | O_EXCL, 0644, 1);
if (SEM_FAILED == semaphore)
{
  perror("sem_open() failed");
  /* handle error */
}