我必须为C++项目制作一个信号量数组。我不打semget()
从main()
;我有一个单独的方法,使其更容易,虽然在main.cpp
中的方法。当我的程序到达semget(semkey,nsems,0666|IPC_CREAT)
时,它返回-1与一个EACCES errno,这显然意味着“一个信号量标识符key
存在,但操作权限由semflg
的低9位指定不会被授予。”为什么在创建信号量时semget()会导致EACCES错误?
我用GDB反复了我的代码。 semget()
的所有三个参数看起来都正确,这是程序调用semget()
的第一个点,所以信号量不存在;我甚至跑过ipcs -s
来确认。我在main.cpp
的顶部有#include <sys/sem.h>
。
这是怎么回事?我已经创建并附加了共享内存段,可能与它有关吗?我看不出如何。
它是否正确地工作的第一次重新启动后? –
我还没试过。那会影响到它呢?为什么? –
那么,使用'ipcs'清理应该已经成功了,但可以肯定的是,重新启动系统肯定会清理任何剩余的共享资源(信号量,共享内存等)。 –