上篇学习笔记3中处理函数signal(),只能处理单个信号。处理多个信号需要信号集函数组(signal set),将在sigprocmask()这样的函数中使用这种数据类型。信号集函数组包括:创建函数集、登记信号集、检测信号集。
1.函数执行过程
2.创建信号集
意义分别为:
<1>初始化信号集合为空
<2>初始化信号集合为所有信号的集合
<3>将指定信号添加到信号集中
<4>从信号集中删除该信号
<5>查询信号是否在信号集中
3.登记信号集
4.实例代码 sigaction.c
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <signal.h>
void func(int sig)
{
printf("I get a signal!\n");
}
int main()
{ char buffer[100];
struct sigaction act;
act.sa_handler=func;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
if(sigaction(SIGINT,&act, NULL) == -1)
{
printf("sigaction error exit now\n");
exit(0);
}
printf("pid:%ld\n",(long)getpid());
for(;;)
{
fgets(buffer,sizeof(buffer),stdin);
printf("buffer is:%s\n",buffer);
}
return 0;
}
原文:http://blog.csdn.net/ctxbloger/article/details/18971373