上篇学习笔记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; }