曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 6347|回复: 0
打印 上一主题 下一主题

[信号] sigemptyset()/sigfillset() -- 初始化信号集

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2012-8-1 00:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 算起)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-30 12:48 , Processed in 0.088470 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表