#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <signal.h>
void print_set(sigset_t *set)
{
int i;
for(i=1;i<32;i++)//i代表信号集合,Linux系统共32种默认信号集合
{
int ret;
ret = sigismember(set,i);//判断是否在未决信号集内
if(ret == 1)//如果在未决信号集中返回1
putchar('1');
else if(ret == 0)//如果不在未决信号集中返回0
putchar('0');
else//出错返回-1
perror("sigismember() err");
}
printf("\n");
}
int main(int ac,int *av[])
{
sigset_t set;//自定义的屏蔽集
sigemptyset(&set);//清零操作,此时不屏蔽任何信号
sigaddset(&set,SIGINT);//加入需要屏蔽的信号名称
int ret = sigprocmask(SIG_BLOCK,&set,NULL);//相当于mode与umas做的位运算,这里是此时的屏蔽集与原本的做某种运算
if(ret == -1)
{
perror("error");
exit(1);
}
while(1)
{
sigset_t pendset;//定义变量保存未决信号集
ret = sigpending(&pendset);//获取未决信号集内容
if(ret == -1)
{
perror("error");
exit(1);
}
print_set(&pendset);//打印未决信号集内容
sleep(1);
}
return 0;
}