Linux之信号集

信号集概述 一个用户进程常常需要对多个信号做出处理。为了方便对多个信号进行处理,在Linux 系统中引入了信号集。 信号集是用来表示多个信号的数据类型。

信号集数据类型 sigset_t

定义路径:
/usr/include/i386-linux-gnu/bits/sigset.h (ubuntu 12.04)
/usr/include/x86_64-linux-gnu/bits/sigset.h (ubuntu16.04)

Linux之信号集_第1张图片
信号集相关的操作主要有如下几个函数:
sigemptyset
sigfillset
sigismember
sigaddset
sigdelset

包含头文件:#include

sigemptyset 函数 初始化一个空的信号集
int sigemptyset(sigset_t *set);
功能:初始化由 set 指向的信号集,清除其中所有的信号即初始化一个空信号集。
参数:set:信号集标识的地址,以后操作此信号集,对 set 进行操作就可以了。
返回值: 成功:返回 0 失败:返回 -1

sigfillset 函数 初始化一个满的信号集
int sigfillset(sigset_t *set);
功能:初始化信号集合 set, 将信号集合设置为所有信号的集合。
参数:set:信号集标识的地址,以后操作此信号集,对 set 进行操作就可以了。
返回值: 成功:返回 0 失败:返回 -1

sigaddset 函数 向某个集合中添加一个信号
int sigaddset(sigset_t *set, int signum);
功能:将信号 signum 加入到信号集合 set 之中。
参数:set:信号集标识的地址。 signum:信号的编号。
返回值: 成功返回 0,失败返回 -1。

sigdelset 函数 从某个信号集中删除一个信号
int sigdelset(sigset_t *set, int signum);
功能:将 signum 所标识的信号从信号集合 set 中删除。
参数:set:信号集标识的地址。 signum:信号的编号。
返回值: 成功:返回 0 失败:返回 -1

sigismember 函数 判断某个集合中是否有某个信号
int sigismember(const sigset_t *set,int signum);
功能:查询 signum 标识的信号是否在信号集合 set 之中。
参数:set:信号集标识符号的地址。 signum:信号的编号。
返回值: 在信号集中返回 1,不在信号集中返回 0 错误

案例:创建一个空的信号集合,向集合中添加信号,判断集合中是否有这个信号

#include 
#include 

int main(int argc, char *argv[])
{
    //创建一个信号集
	sigset_t set;
	int ret = 0;

    //初始化一个空的信号集
	sigemptyset(&set);

    //判断SIGINT信号是否在信号集中
	ret = sigismember(&set, SIGINT);
	if(ret == 0)
    {
		printf("SIGINT is not a member of sigprocmask \nret = %d\n", ret);
    }	
	
    //将指定的信号添加到信号集中
    sigaddset(&set, SIGINT);
	sigaddset(&set, SIGQUIT);
	
	ret = sigismember(&set, SIGINT);
	if(ret == 1)
	{	
        printf("SIGINT is a member of sigprocmask \nret = %d\n", ret);
    }
    
	return 0;
}

执行结果:
Linux之信号集_第2张图片

你可能感兴趣的:(linux应用编程,linux)