私は C を介した Unix でのシグナル処理が初めてで、(純粋な興味から) いくつかのチュートリアルを見てきました。
私の質問は、シグナルが処理されるポイントを超えてプログラムの実行を継続することは可能ですか?
シグナル処理関数がクリーンアップを行うことは理解していますが、例外処理 (C++ など) の精神で、そのシグナルを同じ方法で処理し、プログラムを正常に実行し続けることは可能ですか?
現時点catch
では、無限ループに陥っています (おそらく、終了する方法は を呼び出すことexit(1)
です)。
私の意図は、b
1が割り当てられ、プログラムが正常に終了することです(もちろん可能であれば)。
これが私のコードです:
#include <signal.h>
#include <stdio.h>
int a = 5;
int b = 0;
void catch(int sig)
{
printf("Caught the signal, will handle it now\n");
b = 1;
}
int main(void)
{
signal(SIGFPE, catch);
int c = a / b;
return 0;
}
また、C は手続き型であるため、問題のあるステートメントの前に宣言されたシグナル ハンドラーが、後者の実行後に実際に呼び出されるのはなぜでしょうか?
そして最後に、処理関数が適切にクリーンアップを行うためには、例外が発生した場合にクリーンアップする必要があるすべての変数を関数の前に宣言する必要がありますよね?
上記のいくつかが非常に明白である場合は、回答と謝罪を事前に感謝します。