我想在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
我做错了什么? 感谢。
答案 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;
}