2012-05-08 27 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