信号集操作函数
作者:互联网
信号集操作函数
-
自定义函数集
sigset_t set;
-
清空信号集
sigemptyset(sugset_t *set);
-
全部置一
sigfillset(sigset_t *set);
-
将一个信号添加到信号集中
sigaddset(sigset_t *set, int signum);
-
将一个信号从集合中移除
sigdelset(sigset_t *set,int signum);
-
判断一个信号是否在集合中
sigismember(sigset_t *set, int signum);
-
设置信号屏蔽字和解除信号屏蔽字
int sigprocmask(int how,const sigset_t *set,sigset_t *oldset);
- how
- SIG_BLOCK设置阻塞
- SIG_UNBLOCK取消阻塞
- SIG_SETMASK用自定义的set替换mask
- set自定义set
- oldset:旧有的mask
- how
-
查看未决信号集
int sigpending(sigset_t *set)//传出未决信号集
代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <pthread.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <signal.h>
void sys_err(const char *str)
{
perror(str);
exit(1);
}
void print_set(sigset_t *set)
{
int i;
for(i = 1;i<32;i++)
{
if(sigismember(set,i))
putchar('1');
else
putchar('0');
}
printf("\n");
}
int main(int argc,char *argv[])
{
sigset_t set,oldset,pedset;
int ret = 0;
sigemptyset(&set);
sigaddset(&set,SIGINT);
ret = sigprocmask(SIG_BLOCK,&set,&oldset);
if(ret == -1)
{
sys_err("sigpromask error");
}
while(1)
{
ret = sigpending(&pedset);
if(ret == -1)
{
sys_err("sigpending error");
}
print_set(&pedset);
sleep(1);
}
return 0;
}
注意事项
- 9号信号kill不能被屏蔽
标签:set,函数,sigset,int,ret,信号,操作,include 来源: https://blog.csdn.net/Reggie0202/article/details/114206373