重置信号操作

当发生异常或发生信号时,将调用信号处理函数。 处理程序是使用 signal() 函数定义的。 您在 sig 参数上指定的值与 funct 参数上引用的函数相关联。

在 C 程序中调用信号处理程序时,其相应的信号操作设置为 SIG_DFL。 如果要再次处理同一信号,那么必须重置信号操作。 如果未执行此操作,那么将对后续异常执行缺省操作。 可通过调用 signal()从处理程序内部或外部重置信号的处理。

示例:

下图显示了用于重置信号处理程序的源代码。
图 1。 重置信号处理程序
signal ( SIGINT, &myhandler );
raise ( SIGINT );             /* signal is handled by myhandler.      */
...
raise ( SIGINT );             /* signal is handled by SIG_DFL.        */
...
signal ( SIGINT, &myhandler );/* reset signal handler to myhandler.   */
raise ( SIGINT );             /* signal is handled by myhandler.      */
图 1中:
  • 可以将缺省值重置为 SIG_IGN ,另一个处理程序或同一处理程序。 您可以递归地调用信号处理程序。 堆积后,多个信号处理程序调用的行为与任何其他调用一样。 例如,如果选择了对前一个调用者的操作信号,那么不会将该控件返回给前一个调用者 (即使该调用是另一个信号处理程序) ,而是返回给前一个调用者。
  • signal() 函数返回指定信号的先前信号处理程序的地址,并设置新信号处理程序的地址。