关于sigprocmask函数的一点疑惑,望解答
[code]:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
void handle_sigint(int signo)
{
printf("receive signal %d.\n",signo);
}
int main()
{
sigset_t mask; //信号掩码结构变量,用于指定新的信号掩码
sigset_t omask; //信号掩码结构变量,用于保存原来的信号处理掩码
signal(SIGINT,handle_sigint);
sigemptyset(&mask); //用于清空信号掩码
sigaddset(&mask,SIGINT);//用于向结构中增加SIGINT信号
sigprocmask(SIG_BLOCK,&mask,&omask);//设置掩码,设置完成后,SIGINT信号将被阻塞
sleep(10);
sigprocmask(SIG_SETMASK ,&omask,NULL);//恢复原来的信号处理掩码
exit (0);
}
其中的sigprocmask(SIG_BLOCK,&mask,&omask); 语句中返回的&omask是原来的信号掩码,
疑惑::原来的信号掩码是那些信号呢??该如何查看呢??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
本帖最后由 cokeboL 于 2011-05-17 22:07 编辑
回复 1# long361800
sigprocmask一般是为了保护临界区,执行完临界区后恢复以前的屏蔽就OK了,没必要查看。如果需要,可以sigismember查看某个信号是否在该屏蔽集中被设置,但挨个试每个信号很麻烦的,只要查某些关心的信号是否被设置就够了吧。