免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1766 | 回复: 1
打印 上一主题 下一主题

[Linux] APUE学习,程序清单10-18,关于sigaction函数的小问题,求指点 [复制链接]

论坛徽章:
1
申猴
日期:2013-09-03 17:48:13
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-13 11:07 |只看该作者 |倒序浏览
本帖最后由 wangjc_strive 于 2013-01-13 11:09 编辑

最近在学习APUE,看到第10章,信号部分,遇到以下问题,求解答
在下面程序里的第8、12行的sigaction函数:
sigaction(SIGABRT, NULL, &action);
sigaction(SIGABRT, &action, NULL);
分别是什么意思呢?

  1. 另外我的qq是821254237,如果有也在学习APUE的同道中人,可以加我,互相交流


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

  4. void abort(){
  5.         sigset_t mask;
  6.         struct sigaction action;
  7.         //不能忽略SIGABRT信号,如果是忽略则改成默认处理
  8.         sigaction(SIGABRT, NULL, &action);
  9.         if (action.sa_handler == SIG_IGN)
  10.         {
  11.                 action.sa_handler == SIG_DFL;
  12.                 sigaction(SIGABRT, &action, NULL);
  13.         }
  14.         if(action.sa_handler == SIG_DFL)
  15.                 fflush(NULL);
  16.        
  17.         //不能阻塞SIGABRT,
  18.         sigfillset(&mask);                                        //所有信号加入信号集
  19.         sigdelset(&nask, SIGABRT);//屏蔽除SIGABRT的所有信号
  20.         sigprocmask(SIG_SETMASK, &mask, NULL);//这里设置为:不屏蔽所有的信号,这里与上面是不是有点罗嗦
  21.         kill(getpid(), SIGABRT);

  22.         //若果到达这里,说明进程捕捉到了SIGABRT信号,并且已经返回了
  23.         fflush(NULL);
  24.         action.sa_handler = SIG_DFL;
  25.         sigaction(SIGABRT, &action,         NULL);
  26.         sigprocmask(SIG_SETMASK, *mask, NULL);
  27.         kill(getpid(), SIGABRT);
  28.         exit(1);
  29. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2013-01-13 12:55 |只看该作者
man sigaction
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP