c - 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);
}
}
感谢你的帮助
解决方案
推荐阅读
- windows - 在操作系统范围内用括号封装文本
- python - 创建一个网页,它要求一些输入并将其写入文件
- javascript - 为什么这个使用 react-hook-form 的表单不会重置回 defaultValues?
- r - lubridate:floor_date 设置参考开始时间戳
- java - JNI调用Android对话框,等待用户选择
- google-maps-api-3 - 华为设备没有在我的应用程序中加载谷歌地图
- ruby - 根据创建的方法更改地点索引(RUBY 挑战)
- php - PHP:从字符串数组中删除“\u00a0”
- c# - 并行:打印 CPU 核心数
- visual-studio-code - 如何更改代码运行器中使用的外壳?