1
シグナル処理ステータスに関する情報を取得する関数を記述する必要があります。つまり、特定のハンドラがある場合、またはシグナルが無視された場合、ブロックされたシグナルとどのフラグがアクティブになっているかです。これを行うには、私はsigaction
関数を使用します。ここに私のコードは次のとおりです。シグナル処理に関する情報の取得
void show_signal_info(int signal_number){
struct sigaction s;
int nomask=1;
if(sigaction(signal_number, NULL, &s) == -1){
perror("Error getting information of signal");
}else{
printf("Signal name: %s\n",signal_name(signal_number));
printf("Signal mask: ");
for(i=0; i<32; i++){
if(sigismember(s.sa_mask,i) == 1)
printf("%s ",signal_name(i);
printf("%s",nomask ? "None\n" : "\n");
if(s.sa_handler == SIG_DFL)
printf("Default\n");
else if (s.sa_handler == SIG_IGN)
printf("Ignored\n");
else
printf("Handler\n");
[...]
}
}
問題は、私はs.sa_flagsと上にあるどのようなフラグをチェックする方法を知らないということですか? wait()
の機能で使用できるものに似たマクロがいくつかありますが、それ以外の方法がありますか?
if (s.sa_flags & SA_RESTART)
....
素晴らしいアイデア: – chavaone