信号集
信号集:一个能表示多个信号的数据类型(signal set),很多系统调用都用到了这中数据类型做为参数传递,例如sigaction(),sigprocmask(),sigpending()。
信号集其实就是sigset_t 类型数据结构
#define _SIGSET_NWORDS (1024/(8 * sizeof(unsigned long int )))
typedef struct {
unsigned long int __val[_SIGSET_NWORDS]
} sigset_t
使用这个结构体可以表示一组信号,可以将多个信号添加到该数组结构体中。这个信号集其实就是一个1M字节个内存。
初始化信号集
sigemptyset()
作用:初始化一个自定义的信号集,也就是将信号集中的所有标志位都置0,使得这个信号集不包含任何信号,不阻塞任何信号
信号集初始化:sigset_t set;
函数原形
#include <signal.h> // 需要倒入的头文件
int sigemptyset(sigset_t *set);
参数
set:需要初始化的信号集
返回值
成功:0
失败:-1,并设置errno表示原因
示例
sigset_t set
sigemptyset(&set)
sigfillset()
作用:初始化一个自定义信号集,与sigemptyset不同的是,该函数将所有标志位都设置为1,用于快速创建一个包含所有信号的的信号集,然后在根据需求删除不需要的信号。
函数原形
#include <signal.h>
int sigfillset(sigset_t *set);
参数
set:需要初始化的信号集
返回值
成功:0
失败:-1,并设置errno表示原因
向信号集中添加/删除信号
sigaddset
作用:把信号添加到信号集中
函数原形
int sigaddset(sigset_t *set, int signo);
参数
set:信号集
signo:信号
返回值
成功:0
失败:-1,并设置errno表示原因
sigdelset
作用:从信号集中删除信号
函数原形:
#include <signal.h>
int sigdelset(sigset_t *set, int signum);
参数
set:自定义信号集
signum:要删除的信号
返回值
成功:0
失败:-1,并设置errno表示原因
测试信号是否在信号集中
sigismember()
作用:测试某一个信号是否在信号集中
函数原形:
#include <signal.h>
int sigismember(const sigset_t *set, int signum)
函数参数
set:指定信号集合
signum:需要进行测试的信号
返回值
1:信号在集合中
0:信号不在信号集中
-1:失败,并设置errno