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);
} man sigaction
页:
[1]