0

我有一个关于 C 中信号的问题。我想为信号分配一些特定的 sighandler。

我的功能是:

void searchOccurences(char **myString, char chr, int *occurences) {
   /* I perform some search actions here 
    * at the end of this function *occurrence will contain the 
    * the number occurrences of chr in myString*/
}

我想将此函数分配给 SIGILL 信号(即非法指令信号),但我不能,因为 __sighandler_t 处理程序具有这种定义:

typedef void (*__sighandler_t) (int);

那么如何将我的功能分配给这个信号呢?我想做的替代解决方案是什么?

谢谢 :)

4

1 回答 1

0

不要使用 SIGILL,这可能会掩盖真正的错误。SIGUSR1 和 SIGUSR2 专门用于用户定义的信号。

抱歉,您无法传递其他信息,但它确实存在。您可以做的最好的事情是在发出信号之前将信息存储在全局中,但您必须确定事件的顺序,或者使用某种同步,如互斥锁。

顺便说一句,您是否知道许多 C 运行时库函数不是信号安全的?

于 2012-12-10T13:19:51.967 回答