linux 信号集
xjpcj 2015-08-16 03:53:35 问题来自与 unix环境高级编程
1.如果实现的信号数目少于一个整型量所包含的位数,则可用一位代表一个信号的方法实现信号集。我们假定一种实现有31种信号和32位整型值。
sigemptyset函数将整型量设置为0,sigfillset函数则将整型量中的各个位都设置为1。
这两个函数可以在<signal.h>头文件中实现为宏:
sigempty(ptr) (*(ptr) = 0)
sigfillset(ptr) (*(ptr) = ~(sigset_t)0, 0)
这个宏等于号(=)是怎么理解的
2书本下面实现的函数是这样的
int sigaddset(sigset_t * set,int signo){
if(SIGBAD(signo)){
errno=EINVAL;
return -1;
}
*set|=1<<(signo-1);
return 0;
}
我的理解是用32为整数来表示31位信号,比如 1表示位 001,2表示位010,如果按1<<(signo-1)这样的算法,则1和2这两种信号就每办法表示了,都为000了