C 为信号指定一个特定的信号处理器

C 为信号指定一个特定的信号处理器,c,C,我有一个关于C语言中的信号的问题。我想给一个信号指定一个特定的信号处理器 我的职能是: 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

我有一个关于C语言中的信号的问题。我想给一个信号指定一个特定的信号处理器

我的职能是:

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信号(即非法指令信号),但我不能,因为uu sighandler_t处理程序的定义如下:

typedef void (*__sighandler_t) (int);
那么,我如何将我的函数分配给这个信号呢?对于我想做的事情,有什么替代方案


谢谢:)

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

对不起,您无法传递其他信息,但它在那里。你能做的最好的事情就是在发出信号之前将信息存储在一个全局文件中,但是你必须确定事件的顺序,或者使用某种同步,比如互斥


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

你为什么要这么做?这有什么意义?非法指令信号如何将参数传递给函数?输出将流向何处?为什么是西格尔?谁会发送SIGILL?它确实有一个sens,我想向我的处理程序发送比signum更多的信息。我将手动发出非法指令信号。我可以选择另一个信号来测试,但我选择了这个。我不会验证输出,我只是想知道如何传递更多参数。SIGILL是操作系统在执行非法指令时向进程发送的信号。您不向信号处理程序发送数据。操作系统确实如此。信号处理程序获得的唯一信息是发生了信号,在某些情况下,当您有特殊的信号处理程序时,还有其他特定于操作的信息(如SIGILL或SIGSEGV的地址)。我可以使用“raise()”函数发出此信号。从您的回答中我可以理解,我不能手动将其他参数传递给我的处理程序?不,您不能。这不是信号的用途,而是我所做的,我已经将所有函数的参数声明为全局变量。我只是想知道我是否可以这样做,谢谢。