如何获取 C 程序内信号量集中可能的最大信号量数量?
以下程序获取由信号量 id semid
#include <sys/ipc.h>
#include <sys/sem.h>
key_t key;
int semid;
key = ftok("/home/somefile", 'E');
semid = semget(key, 10, 0666 | IPC_CREAT);
但是,如果我想调用 semget
函数,以便它始终返回系统中可能的最大信号量集(SEMMSL
,250 in我的情况)。它不是#define
语句。那么除了打开 /proc/sys/kernel/sem
文件之外,还有其他方法可以获取它吗?
最佳答案
听起来你已经有了答案——打开/proc/sys/kernel/sem 并在你读出的第一个数字上调用 atoi() 。有时,解析/proc 文件系统是解决 Linux 问题的最佳方案。
但是,我在/usr/include/linux 中查找了 250。看起来您寻找的 #define 位于/usr/include/linux/sem.h 中:
#define SEMMSL 250
因此,假设已安装 Linux header ,您应该能够 #include linux/sem.h 并访问该 SEMMSL 定义。
这里的权衡是使用#define 会将 SEMMSL 硬编码到您的二进制文件中。如果您碰巧将二进制文件移动到另一台具有较小数字的计算机,我可以看到这会导致问题。 FWIW,我刚刚检查了我正在运行的 x86_32、x86_64 和 PowerPC Linux 机器(所有最新的 Ubuntu 发行版),它们都报告 250。但是,通过解析/proc 文件系统可以为您提供正在运行的内核的当前限制,这会打击我作为一个更好的解决方案。
关于c - C中信号量集中的最大信号量数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9667644/