重複の可能性:
標準シグナル ライブラリからの C 宣言
構文のリンクへの参照は次のとおりです。関数へのポインタの構文しか理解していません。しかし、これは複雑すぎます。説明してください。
http://www.cplusplus.com/reference/clibrary/csignal/signal/
指定された正確な構文を理解しようとしています(解決できないポインターの混乱があります)。
重複の可能性:
標準シグナル ライブラリからの C 宣言
構文のリンクへの参照は次のとおりです。関数へのポインタの構文しか理解していません。しかし、これは複雑すぎます。説明してください。
http://www.cplusplus.com/reference/clibrary/csignal/signal/
指定された正確な構文を理解しようとしています(解決できないポインターの混乱があります)。
signal()
注釈で言及したリンクからのコード例を次に示します。
//This is a signal handling function. When your main program gets a signal, it
// will call this function. The function just prints a message.
static void catch_function(int signal) {
printf("Interactive attention signal caught.");
}
int main(void) {
//register to catch the interrupt signal.
if (signal(SIGINT, catch_function) == SIG_ERR) {
printf("An error occurred while setting a signal handler.\n");
return EXIT_FAILURE;
}
while(1)
{
printf("do stuff\n");
sleep(1);
}
}
このコードは、^C (ctrl+C) 割り込み信号を受け取るまで、(何かを実行して) 永遠にループします。その時点で、私たちが指示したことは何でも実行します。
mike@linux-4puc:~> ./a.out
do stuff
do stuff
^CInteractive attention signal caught.do stuff
do stuff
do stuff
do stuff
do stuff
^CInteractive attention signal caught.do stuff
シグナル関数は次のように定義されます。
typedef void (*sighandler_t)(int); //this just means a pointer to a function
//that looks like: void sighandler(int)
sighandler_t signal(int signum, sighandler_t handler);
つまり:
次に、システム レベルで、プログラムの実行中にシグナルが着信し、それに対する処理がある場合は処理を行います。適切な処理がない場合、OS は既定のアクションを実行します。
上記の例からシグナル呼び出しを削除すると、ctrl+C がシグナル ハンドラーの実行を許可するだけでなく、プログラムを強制終了することがわかります。
あなたの質問に答えますか?