免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6829 | 回复: 4

pr_mask函数的疑问? [复制链接]

论坛徽章:
0
发表于 2010-10-27 19:56 |显示全部楼层
  1. static void pr_mask(char* ptr)//打印当前信号屏蔽字的屏蔽信号

  2. {

  3.         sigset_t                sigset;

  4.         int                     errno_save;

  5.         int                     ret;



  6.         errno_save = errno;

  7.         ret = sigprocmask(0, NULL, &sigset);

  8.         if(ret == -1){

  9.                 perror("sigprocmask error");

  10.                 exit(1);

  11.         }



  12.         printf("%s", ptr);



  13.         if(sigismember(&sigset, SIGINT)){

  14.                 printf("SIGINT ");

  15.         }

  16.         if(sigismember(&sigset, SIGQUIT)){

  17.                 printf("SIGQUIT ");

  18.         }

  19.         if(sigismember(&sigset, SIGUSR1)){

  20.                 printf("SIGUSR1 ");

  21.         }

  22.         if(sigismember(&sigset, SIGALRM)){

  23.                 printf("SIGALRM ");

  24.         }



  25.         printf("\n");

  26.         errno = errno_save;

  27. }



复制代码
代码中errno_save = errno;这行说是可能被中断掉?我不理解,是因为sigprocmask返回前可能收到信号吗?但这里的第二个参数为null啊?这也会将未决的一个信号发送?

论坛徽章:
0
发表于 2010-10-27 20:30 |显示全部楼层
up

论坛徽章:
0
发表于 2010-10-27 22:25 |显示全部楼层
保存恢复error值是因为这个函数可能被信号处理函数调用,下面的sigprocmask出错时就不会影响外面的error了。

第二个参数为NULL时线程中mask的值不会改变

论坛徽章:
0
发表于 2010-10-28 09:57 |显示全部楼层
回复 3# kingoftime3


     你没好好看我的问题,怎么会到信号处理函数中去?是因为sigprocmask吗?这才是我的问题

论坛徽章:
0
发表于 2010-10-28 16:11 |显示全部楼层
不去信号处理函数sigmask也有可能将改errno的值改了,你可以这么想,他这里是做了一个模块,在这个模块里,有个函数f()会改变errno值来显示f()的错误,但又不想这个模块影响总体的errno
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP