wangjc_strive 发表于 2013-01-13 11:07

APUE学习,程序清单10-18,关于sigaction函数的小问题,求指点

本帖最后由 wangjc_strive 于 2013-01-13 11:09 编辑

最近在学习APUE,看到第10章,信号部分,遇到以下问题,求解答
在下面程序里的第8、12行的sigaction函数:
sigaction(SIGABRT, NULL, &action);
sigaction(SIGABRT, &action, NULL);
分别是什么意思呢?
另外我的qq是821254237,如果有也在学习APUE的同道中人,可以加我,互相交流


//abort函数的实现
#include <apue.h>

void abort(){
        sigset_t mask;
        struct sigaction action;
        //不能忽略SIGABRT信号,如果是忽略则改成默认处理
        sigaction(SIGABRT, NULL, &action);
        if (action.sa_handler == SIG_IGN)
        {
                action.sa_handler == SIG_DFL;
                sigaction(SIGABRT, &action, NULL);
        }
        if(action.sa_handler == SIG_DFL)
                fflush(NULL);
       
        //不能阻塞SIGABRT,
        sigfillset(&mask);                                        //所有信号加入信号集
        sigdelset(&nask, SIGABRT);//屏蔽除SIGABRT的所有信号
        sigprocmask(SIG_SETMASK, &mask, NULL);//这里设置为:不屏蔽所有的信号,这里与上面是不是有点罗嗦
        kill(getpid(), SIGABRT);

        //若果到达这里,说明进程捕捉到了SIGABRT信号,并且已经返回了
        fflush(NULL);
        action.sa_handler = SIG_DFL;
        sigaction(SIGABRT, &action,       NULL);
        sigprocmask(SIG_SETMASK, *mask, NULL);
        kill(getpid(), SIGABRT);
        exit(1);
}

hyq5436 发表于 2013-01-13 12:55

man sigaction
页: [1]
查看完整版本: APUE学习,程序清单10-18,关于sigaction函数的小问题,求指点