我正在尝试在 C 中的初始化函数中创建信号量:
void sem_init(int size, sem_t** sem1, sem_t** sem2) {
char* semname1 = "/somename";
char* semname2 = "/someothername";
errno = 0;
*sem1 = sem_open(semname1, O_CREAT, S_IRUSR|S_IWUSR, 0);
printf(strerror(errno));
errno = 0;
*sem2 = sem_open(semname2, O_CREAT, S_IRUSR|S_IWUSR, size);
printf(strerror(errno));
}
但即使我设置了 O_CREAT 标志并且名称格式正确,我总是得到“没有这样的文件或目录”作为输出。信号量创建于 /dev/shm/...
我看不出有任何明显的错误发生原因。请帮助我解决我做错了什么。
最佳答案
正如对 OP 问题的评论所指出的,errno
中使用了不正确的值。建议:
void sem_init(int size, sem_t** sem1, sem_t** sem2) {
char* semname1 = "/somename";
char* semname2 = "/someothername";
sem_t local_sem1;
sem_t local_sem2;
if( (local_sem1 = sem_open(semname1, O_CREAT, S_IRUSR|S_IWUSR, 0) ) == SEM_FAILED )
{
perror( "sem_open for sem1 failed" );
exit( EXIT_FAILURE );
}
*sem1 = local_sem1;
if( (local_sem2 = sem_open(semname2, O_CREAT, S_IRUSR|S_IWUSR, 0) ) == SEM_FAILED )
{
perror( "sem_open doe awm2 failed" );
exit( EXIT_FAILURE );
}
*sem2 = local_sem2;
}
关于C: "No such file or directory"on sem_open() with O_CREAT 和正确的信号量名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51224686/