C 我如何知道信号的当前状态
在C语言中,是否有一种方法可以了解有关信号的以下信息:C 我如何知道信号的当前状态,c,signals,C,Signals,在C语言中,是否有一种方法可以了解有关信号的以下信息: 现在确定信号被阻断了吗 我们是否在信号处理函数chanin中(即,当前代码是否从函数调用,该函数被称为特定信号的信号处理程序)?如果是,我能知道当前信号是什么吗 谢谢首先,您可以使用带有空集指针的sigprocmask int sigprocmask(int how, const sigset_t *set, sigset_t *oldset); a。如何设置为: SIG_UNBLOCK(集合中的信号将从当前阻塞信号集合中删除。尝试解除未
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
a。如何设置为:
SIG_UNBLOCK
(集合中的信号将从当前阻塞信号集合中删除。尝试解除未阻塞信号的阻塞是合法的)
bset
可以设置为NULL
(因为您不想更改阻塞的信号)
c。如果oldset
不是NULL
,则信号掩码的上一个值存储在oldset中。因此,在地址存储在oldset中的位置可以得到阻塞的信号
其次,为了知道您是否在信号处理例程中,当您编写信号处理程序定义时,您可以接受int signum作为参数,如下所示:
void mySignalHandler(int signum);
如果您想知道,以便可以在该时间点阻止其他一些信号,您可以在开始时使用阻塞功能,在结束时使用解除阻塞功能(使用sigprocmask()
)。您甚至可以将所述信号设置为SIG\u IGN
状态,以便在处理当前信号时忽略它们(使用signal()
)
最后,请阅读男士页面
编辑:
因为作者说他确实读过这些函数,所以我建议使用apropos命令来查找这些难以找到的函数。比如说,
$ apropos "blocked signals"
提供大约5次点击,其中1次是sigprocmask
干杯 通过使用第二个参数null和第三个参数non-null调用,可以知道当前阻止了哪些信号(在这些条件下忽略第一个参数,因此传递零)。它将填充作为第三个参数提供的
sigset\t
我不知道堆栈上是否有信号处理程序帧。我想你也许可以使用
\u Unwind.*
函数系列,但这将是一个可怕的难题。浏览手册页,我开始怀疑你是否不需要跟踪自己……谢谢。事实上,我经常看手册页。我知道信号处理程序例程,最重要的可能是我不是这个函数的所有者,这就是我问这个问题的原因。我不知道sigprocmask函数。谢谢