曲径通幽论坛

标题: sigemptyset()/sigfillset() -- 初始化信号集 [打印本页]

作者: beyes    时间: 2012-8-1 00:50
标题: sigemptyset()/sigfillset() -- 初始化信号集
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);

    return 0;
}

运行输出:
$ ./sigfillset
0x7fffffff
0xfffffffe
0xffffffff
0xffffffff
... ...
0xffffffff
0xffffffff
输出的第 1 行和第 2 行正的最高位和最低位正好对应了信号中的第 32 号和第 33 号信号(信号从 1 算起)。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2