曲径通幽论坛

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

[信号] sigismember() -- 测试是否为一个信号

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2012-7-30 21:40:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
sigismember() 函数原型如下:
[C++] 纯文本查看 复制代码
#include <signal.h>
int sigismember(const sigset_t *set, int signum);

该函数有两个参数,第 1 个参数 set 是个信号集;第 2 个函数指定一个信号码。整个函数的作用就是测试由 signum 给出的新号码是否是现有信号集中的一员。现有的信号集可通过 kill -l 命令列出,可以看到,当前一共有 62 (没有第 32 和 33 号信号)个信号。函数测试成功时返回 1,如果测试的新号码不属于现有信号集,那么它返回 0 。

测试代码:
[C++] 纯文本查看 复制代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>

void print_signal_set (FILE *of, char *prefix, const sigset_t *sigset)
{
        int sig, cnt;
        cnt = 0;

        for (sig = 1; sig < NSIG; sig++) {
            if (sigismember(sigset, sig)) {
                cnt++;
                fprintf(of, "%s%d  (%s)\n", prefix, sig, strsignal(sig));
            }
        }
}

int main(int argc, char **argv)
{
        FILE *SF;
        SF = fopen ("sigfile.txt", "w");
        if (SF == NULL) {
           perror ("fopen");
           exit (EXIT_FAILURE);
        }

        sigset_t sigset;
        char prefix[128];
        strcpy (prefix, "Signal ");

        sigfillset(&sigset);
        print_signal_set (SF, prefix, &sigset);

        fclose (SF);

        return 0;
}

运行后,会在当前目录下生成一个 sigfile.txt 的文件,里面的内容为:
[beyes@beyes   signal]$ cat sigfile.txt
Signal 1  (Hangup)
Signal 2  (Interrupt)
Signal 3  (Quit)
Signal 5  (Trace/breakpoint trap)
Signal 6  (Aborted)
Signal 7  (Bus error)
Signal 8  (Floating point exception)
Signal 9  (Killed)
Signal 10  (User defined signal 1)
Signal 11  (Segmentation fault)
Signal 12  (User defined signal 2)
Signal 14  (Alarm clock)
Signal 17  (Child exited)
... ...
Signal 61  (Real-time signal 27)
Signal 62  (Real-time signal 28)
Signal 64  (Real-time signal 30)
程序中的 strsignal() 函数为打印信号描述性信息函数,可参考:http://www.groad.net/bbs/read.php?tid-7321.html

sigset_t  数据类型说明可参考:http://www.groad.net/bbs/read.php?tid=922&ds=1#2000
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-31 14:09 , Processed in 0.080352 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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