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 |