更新:整个问题出现问题,我的c ++代码中出现语法错误。
在Linux上我找到了
#define _NSIG 64
<{1>}中的,但我认为包括那将不是一个真正符合标准的解决方案。
glibc中的 asm-generic/signal.h
使用了这个signal.h
定义,但是它隐藏在include-define-undef-ifdef和类似的预处理器命令的复杂结构之后,并且它不是一个可见的符号。简单_NSIG
。
我只是想找到一种方法来找到我可以给#include <signal.h>
和类似信号处理api调用的最大值,包括实时信号。这有可能吗?
答案 0 :(得分:5)
POSIX.1-2001标准要求SIGRTMIN
和SIGRTMAX
的定义。在linux上,它们是使用_NSIG定义的。
要符合POSIX标准,请使用上述定义,而不是直接使用_NSIG
#include <stdio.h>
#include <signal.h>
int main() {
printf("%lu\n", SIGRTMAX);
return 0;
}
使用gcc main.cpp
答案 1 :(得分:1)
POSIX不提供最大信号编号。最后一个将NSIG添加到POSIX的提案似乎都失败了。
2017年5月来自http://austingroupbugs.net/view.php?id=1138:
joerg:为了使便携式shell实现更容易,如果标准还添加了一个&#34; NSIG&#34;那么这将是一个好主意。可以重定向到getconf()调用的定义。
kre: NSIG没有用,除非我们也对信号数字所用的值做出假设,比如它们来自标准避免做的1..NSIG(并且应该继续做) 。)
它不是POSIX,但许多程序都假设信号从1到某个最大数字。 Matz's Ruby uses this C code:
#ifndef NSIG
# define NSIG (_SIGMAX + 1) /* For QNX */
#endif
signal.h中的4.2BSD defined NSIG,使得NSIG-1是最大信号数。我猜大多数其他POSIX系统都从BSD中获取了NSIG,尽管NSIG从未成为POSIX的一部分。 Ruby在许多POSIX系统上运行,对于没有NSIG的系统,只需要这3行。