首页 > 解决方案 > sem_unlink():macOS 上的权限被拒绝

问题描述

我正在使用信号量进行学校作业,每次我重新启动机器时,一切都按预期工作,但在运行我的代码后,第二次尝试给出未定义的结果。我得出的结论是,我的机器不允许我取消链接任何创建的信号量,并且检查 errno 表明我的结论是正确的。它给出了 errno EACCES,我该如何解决这个问题?我正在研究 Xcode (12.2) 的最后愿景。

我正在运行的代码:

#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <semaphore.h>
#include <fcntl.h> /* For O_* constants */
#include <errno.h>

const char *semName1 = "my_sema1";
const char *semName2 = "my_sema2";

int main(int argc, char **argv)
{

    pid_t pid;
    sem_t *sem_id1 = sem_open(semName1, O_CREAT, O_RDWR, 1);
    sem_t *sem_id2 = sem_open(semName2, O_CREAT, O_RDWR, 0);
    int i, status;

    pid = fork();
    if (pid) {
        for (i = 0; i < 100; i++) {
            sem_wait(sem_id1);
            putchar('A'); fflush(stdout);
            sem_post(sem_id2);
        }
        sem_close(sem_id1);
        sem_close(sem_id2);
        wait(&status);
        int error = sem_unlink(semName1);
        int hej2 = sem_unlink(semName2);
        printf("%d \n",error);
        if (errno == EACCES){
            printf("%d \n",error);
        }
        
        
        

    } else {
        for (i = 0; i < 100; i++) {
            sem_wait(sem_id2);
            putchar('B'); fflush(stdout);
            sem_post(sem_id1);
        }
        sem_close(sem_id1);
        sem_close(sem_id2);
    }
}

感谢你的帮助

标签: cxcodemacosprocesssemaphore

解决方案


推荐阅读