C: "No such file or directory"on sem_open() with O_CREAT 和正确的信号量名称

标签 c linux semaphore

我正在尝试在 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/

相关文章:

c - 使用 semaphore.h 和 ucontext.h 找不到这样的文件

c - 信号量术语

c - 使用SUID人为提升权限

linux - 从文件 shell 脚本中获取子字符串

linux - popen密码更改linux

linux - 获取正在运行的服务并输出Linux上的服务版本

c - 甚至我的主要功能也没有运行

C 堆栈/范围,函数结束后变量的生命周期

c - 代码的执行顺序

c++ - 如何正确编译和链接 C 程序?