我有此任务要做:
编写一个将所有可能的信号void myfunct(void(*f)(int sig))
设置f
为处理程序的函数。
我有两个问题:
f
给定带有参数的功能,将其设置为处理程序真的有效吗?它不应该没有任何参数吗?谢谢你。
- 如何获得所有可能的信号?有这个功能吗?我可以通过某种方式遍历它们吗?
大多数实现都提供一个常量,例如NSIG
(Glibc提供NSIG
)或_NSIG
(Linux提供_NSIG)。因此,您可以遍历该常数,并为所有常数设置相同的信号处理功能。
没有“最高信号编号”的POSIX定义值。POSIX中有一个建议添加一个宏NSIG_MAX
。
{NSIG_MAX}
sysconf(_SC_NSIG)的最大可能返回值。请参见[交叉引用到XSH sysconf()]。{NSIG_MAX}的值应不大于sigset_t类型(见[cross-ref to])能够表示的信号数量,而忽略sigfillset()或sigaddset()施加的任何限制。
但是它还没有加入POSIX(很可能它将成为POSIX版本的一部分-第8期)。
- 给定函数f为参数,将函数f设置为处理程序真的有效吗?它不应该没有任何参数吗?
设置信号处置时,信号处理功能所采用的参数无关紧要。它使用信号号,但不会阻止您将其用作多个信号的处理程序。
但是有一些特殊情况需要处理。某些无法捕获或忽略的信号(SIGKILL
和SIGSTOP
)。还有其他信号(SIGFPE
,SIGILL
和SIGSEGV
)为其中,同时允许捕获,信号处理程序不能返回到它的调用者(即你需要从信号处理程序退出)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句