sigemptyset() 和 sigfillset() 函数原型分别如下:
[C++] 纯文本查看 复制代码 #include <signal.h>
int sigemptyset(sigset_t *set);
int sigfillset(sigset_t *set);
这两个函数都用来初始化信号集。sigemptyset() 用来清除 set 参数指定信号集中的所有信号;sigfillset() 用来包括所有信号。
sigemptyset() 函数的实现方法可能如下:
[C++] 纯文本查看 复制代码 int sigemptyset FUNCTION((set), sigset_t *set)
{
if (set)
memset(set, 0, sizeof(sigset_t))
return 0;
}
sigfillset() 函数的实现方法可能如下:
[C++] 纯文本查看 复制代码 int sigfillset (sigset_t *set)
{
if (set == NULL)
{
__set_errno (EINVAL);
return -1;
}
memset (set, 0xff, sizeof (sigset_t));
return 0;
}
需要注意的是,在 Linux 里,使用 kill -l 命令可以看到所列出的信号中,没有第 32 和第 33 号信号。因此,使用下面的程序测试 sigfillset() 函数时,可以看到:
[C++] 纯文本查看 复制代码 #include <stdio.h>
#include <signal.h>
int main()
{
sigset_t myset;
int i;
sigfillset(&myset);
for (i = 0; i < 32; i++)
printf ("0x%x\n", myset.__val[i]);
return 0;
}
运行输出:$ ./sigfillset
0x7fffffff
0xfffffffe
0xffffffff
0xffffffff
... ...
0xffffffff
0xffffffff 输出的第 1 行和第 2 行正的最高位和最低位正好对应了信号中的第 32 号和第 33 号信号(信号从 1 算起)。 |