2012-05-08 34 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()函數一起使用,或者有其他方法可以使用它們嗎?

回答

1

的問題是,我不知道如何檢查是與 s.sa_flags

可以測試位,例如什麼標誌:

if (s.sa_flags & SA_RESTART) 
    .... 
+0

好主意。非常感謝! – chavaone