【发布时间】:2011-11-13 04:37:50
【问题描述】:
我必须为 C++ 项目创建一个信号量数组。我不是从main() 打电话给semget();我有一个单独的方法让它更容易,尽管main.cpp 中有一个方法。当我的程序到达 semget(semkey,nsems,0666|IPC_CREAT) 时,它返回 -1 并带有 EACCES errno,这显然意味着“key 存在信号量标识符,但不会授予 semflg 的低 9 位指定的操作权限。”
我已经用 GDB 反复检查了我的代码。 semget() 的所有三个参数看起来都正确,这是程序调用 semget() 的第一个点,因此信号量不存在;我什至跑了ipcs -s 来确定。我在main.cpp 的顶部有#include <sys/sem.h>。
这里发生了什么?我已经创建并附加了一个共享内存段,这可能与它有关吗?我看不出来。
【问题讨论】:
-
重启后第一次能正常工作吗?
-
我没试过。那会影响吗?为什么?
-
好吧,用
ipcs清理应该可以解决问题,但可以肯定的是,重新启动系统肯定会清理任何剩余的共享资源(信号量、共享内存等...) -
...嗯。那成功了。谢谢!
标签: c++ unix permissions ipc semaphore