如何检测C中的sem_open错误

时间:2014-04-29 19:50:28

标签: c linux posix semaphore

当我初始化一个新的信号量时,我想检测一下,如果它被正确初始化,那么最好的方法是什么?

根据this link,如果发生错误,sem_open返回-1,我做出了决定:

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

但是当我尝试编译时会抛出警告 - 指针和整数之间的比较。请问有什么方法可以解决这个问题吗?

谢谢

1 个答案:

答案 0 :(得分:2)

出错时,sem_open()返回SEM_FAILED,并设置errno以指示错误。

请注意,问题代码忽略使用SEM_FAILED;而是指定'-1';这导致编译器警告“问题中指示的指针和整数之间的比较”。

检查错误。像这样:

errno=0;  /* <---- This is an important thing I learned when using errno. */
if ((sem_t *semaphore = sem_open("/sem1", O_CREAT | O_EXCL, 0644, 0)) == SEM_FAILED) 
   {
   fprintf(stderr, "sem_open() failed.  errno:%d\n", errno);
   ...