mac os x - sem_open retuns errno 0,未定义错误

时间:2015-01-26 16:24:49

标签: macos semaphore

我想在mac os x中创建一个信号量:

const char *semaphore_open_path = "/tmp/sem_handle_open";
errno = 0;
sem_t *semaphore_handle_open = sem_open(semaphore_open_path, O_CREAT, S_IRUSR | S_IWUSR, 0);
if(semaphore_handle_open == SEM_FAILED || !semaphore_handle_open)
{
    printf("ERROR sem_open init: %s , %d\n", strerror(errno), errno);
    exit(EXIT_FAILURE);
}

我收到错误:ERROR sem_open init: Undefined error: 0 , 0

我做错了什么? 感谢。

1 个答案:

答案 0 :(得分:2)

sem_open需要一个名字,而不是路径。此外,errno应声明为extern int errno,否则将始终为零!

此代码段在我的Mac上运行正常。

#include <semaphore.h>
#include <stdio.h>
#include <string.h>

extern int errno;

int main(void) {

  sem_t *sem = sem_open("semaphore", O_CREAT, S_IRUSR | S_IWUSR, 0);
  if (!sem) {
    fprintf(stderr, "%s (%d)", strerror(errno), errno);
  }
  return 0;

}