【问题标题】:Getting information about signal handling获取有关信号处理的信息
【发布时间】:2012-05-08 16:03:32
【问题描述】:

我必须编写一个函数来检索有关某些信号处理状态的一些信息。也就是说,如果有特定的处理程序或信号被忽略,则被阻塞的信号以及激活的标志。为了做到这一点,我使用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() 函数一起使用的宏,还是有其他方法可以做到这一点?

【问题讨论】:

    标签: c unix signals


    【解决方案1】:

    问题是我不知道如何检查标志是什么 s.sa_flags

    您可以测试位,例如:

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

    【讨论】:

    • 好主意。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多