- 论坛徽章:
- 1
|
本帖最后由 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);
- }
复制代码 |
|