0

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シグナル(つまり、Illegal Instruction Signal)に割り当てたいのですが、__ sighandler_tハンドラーがこの種の定義であるため、割り当てることができません。

typedef void (*__sighandler_t) (int);

では、どうすればこの信号に関数を割り当てることができますか?私がやりたいことの代替ソリューションは何ですか?

ありがとう :)

4

1 に答える 1

0

SIGILL を使用しないでください。本物のエラーを隠す可能性があります。SIGUSR1 と SIGUSR2 は、特にユーザー定義シグナル用です。

追加情報を渡すことはできません。申し訳ありませんが、あります。できる最善の方法は、シグナルを発生させる前に情報をグローバルに格納することですが、イベントのシーケンスを確認するか、ミューテックスのようなある種の同期を使用する必要があります。

ところで、多くの C ランタイム ライブラリ関数がシグナル セーフではないことをご存知ですか?

于 2012-12-10T13:19:51.967 に答える