2012-05-08 14 views
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) 
    .... 

答えて

1

問題

は、私は s.sa_flags

あなたは、たとえば、ビットをテストすることができて上であるかのフラグをチェックする方法を知らないということです。どうもありがとうございます!

+0

素晴らしいアイデア: – chavaone

関連する問題