我有以下问题。我想确保信号量被正确初始化,所以我把它放在那里,当发生错误时应该是真的。
if ((sem_t *semaphore = sem_open("/sem1", O_CREAT | O_EXCL, 0644, 1))
== SEM_FAILED) {handle error}
似乎如果发生错误,它可以正常工作 - 我可以处理该错误。但是当该条件为假时,那个信号量没有被创建,我认识到它,因为进程在sem_wait(信号量)上停止。 当我运行没有“if”的代码时,它工作正常,但我无法检测到任何错误。
我该怎么办?
答案 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 */
}