【发布时间】:2015-12-02 08:49:12
【问题描述】:
更新:整个问题都出问题了,这是我的 c++ 代码中的语法错误。
在 Linux 上我发现了
#define _NSIG 64
在asm-generic/signal.h 中,但我认为包含它不会是一个真正符合标准的解决方案。
glibc 中的signal.h 使用了这个_NSIG 定义,但是它隐藏在一个复杂的include-define-undef-ifdef 结构和类似的预处理器命令之后,并且在简单的#include <signal.h> 之后它不是可见符号.
我只是在寻找一种方法来找到我可以提供给sigaction 的最大信号以及类似的信号处理 api 调用,包括实时信号。有没有可能?
【问题讨论】:
-
POSIX.1-2001 要求定义
SIGRTMIN和SIGRTMAX并且实现至少支持_POSIX_RTSIG_MAX信号。改用这些定义 -
@JensMunk _POSIX_RTSIG_MAX 在 glibc 的
bits/posix1_lim.h中解析为 8 (!!),而我系统上的实际值是 64。可能是一些信号队列大小或类似的东西。SIGRTMAX在#include <signal.h>之后也未定义,与我在 NSIG 中遇到的问题类似。 -
这是 POSIX 兼容所需的最小信号数。当前信号数由 SIGRTMAX 给出。你可能需要给你的编译器一个选项来暴露 SIGRTMIN,检查头文件