- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我必须为 C++ 项目创建一个信号量数组。我不调用 semget()
来自 main()
;我有一个单独的方法来简化它,尽管是 main.cpp
中的一个方法.当我的程序到达 semget(semkey,nsems,0666|IPC_CREAT)
,它返回 -1 和 EACCES errno,这显然意味着“key
存在信号量标识符,但不会授予 semflg
的低 9 位指定的操作权限。”
我已经用 GDB 反复检查了我的代码。 semget()
的所有三个参数看对了,这是程序调用semget()
的第一点,所以信号量还不存在;我什至跑了ipcs -s
确保;确定。我有 #include <sys/sem.h>
在 main.cpp
的顶部.
这是怎么回事?我已经创建并附加了一个共享内存段,这可能与它有关吗?我看不出如何。
最佳答案
来自手册:
EACCES A semaphore set exists for key, but the calling process does not have permission to
access the set, and does not have the CAP_IPC_OWNER capability.
提醒一下,由于信号量是系统对象,因此只有在为此明确发出系统调用时才会删除它。 (semctl
与 IPC_RMID
或 ipcrm
术语命令)。此外,semkey
必须是唯一的(例如从 ftok()
函数中检索),否则可能在您第一次调用之前由另一个程序创建它符号获取
。因为它会存在,所以您会捕获所谓的 EACCES
错误,因为并非所有程序都像您一样对信号量使用 0666 权限。
重启会刷新共享对象池(信号量、共享内存段、消息队列):
#!/bin/bash
for i in `ipcs -s | cut -f 2 -d ' '`
do
ipcrm -s $i
done
for i in `ipcs -m | cut -f 2 -d ' '`
do
ipcrm -m $i
done
for i in `ipcs -q | cut -f 2 -d ' '`
do
ipcrm -q $i
done
关于c++ - 为什么 semget() 在 *creating* 信号量时会导致 EACCES 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8109641/
我是一个 C 菜鸟,正在尝试创建一个使用 semget 的程序(首先是 main.c 的 if 语句)。我在 linux 机器上工作并编写了一些涉及信号量的代码。当我运行我的程序时,它返回“semge
我正在尝试让这段代码工作,但我做不到。我设法创建一些不显示任何编译错误或警告的代码,但是当我尝试执行时,它失败并出现以下错误: semget:没有这样的文件或目录 这是我的代码: #include
semget()函数用于创建信号量集。它需要三个参数: 信号量的键值。 集合中信号量的数量。 标志值。它决定创建信号量的访问权限和约束。 在代码中,标志被选择为零,如下所示: semget(semid
通常,位于 sys/types.h 文件中的一些常量标志值会作为第三个参数传递给 semget() 函数。然而,为我们提供的一段代码包含这样一个 semget() 函数调用: sem_id = sem
#include #include #include #include using namespace std; main () { string key = "/m/lb1/act
我在子进程中访问信号量时遇到问题。在子进程中时,我无法通过 semget() 获得已创建的信号量。 这是 make_semaphores() 函数; int make_semaphores(key_t
我必须为 C++ 项目创建一个信号量数组。我不调用 semget()来自 main() ;我有一个单独的方法来简化它,尽管是 main.cpp 中的一个方法.当我的程序到达 semget(semkey
我正在研究 Beej's Guide to Unix IPC 中的信号量示例程序. 示例程序包含以下信号量初始化代码。我只是从中发布与问题相关的片段。要查看完整代码,请访问我在上面提供的链接。 /*
当我使用 semget 创建信号量组 ID(传递 IPC_CREAT | IPC_EXCL 标志)时 - 通常情况下,组内的信号量未初始化,可能包含“随机值”。 所以我需要在获取新创建的信号量组的 i
所以我目前正在编写一个服务器/客户端程序,它将接收三个命令(HI、PID 和 GOODBYE)并相应地处理它们。我在 server.c 代码中使用 semget() 似乎遇到了一些麻烦。 我得到的错误
我是一名优秀的程序员,十分优秀!