我必须编写一个函数来检索有关某些信号处理状态的一些信息。也就是说,如果存在特定的处理程序或信号被忽略,则被阻止的信号和激活的标志。为此,我使用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()
函数的那些宏,还是有其他方法可以做到这一点?
答案 0 :(得分:1)
问题是我不知道如何查看正在使用的标志 s.sa_flags
您可以测试位,例如:
if (s.sa_flags & SA_RESTART)
....