当我初始化一个新的信号量时,我想检测一下,如果它被正确初始化,那么最好的方法是什么?
根据this link,如果发生错误,sem_open返回-1,我做出了决定:
if ((sem_t *semaphore = sem_open("/sem1", O_CREAT | O_EXCL, 0644, 1)) == -1) {handle error}
但是当我尝试编译时会抛出警告 - 指针和整数之间的比较。请问有什么方法可以解决这个问题吗?
谢谢
答案 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);
...