![sigfillset 未设置信号位](https://linux22.com/image/849782/sigfillset%20%E6%9C%AA%E8%AE%BE%E7%BD%AE%E4%BF%A1%E5%8F%B7%E4%BD%8D.png)
我遇到了这个奇怪的问题!我的代码非常简单。
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<stdlib.h>
main()
{
sigset_t signal ;
printf("Value of signal before sigfil is %x\n",signal) ;
sigemptyset(&signal);
printf("Value of signal after sigempty is %x\n",signal) ;
sigfillset(&signal) ;
printf("Value of signal after sigfil is %x\n",signal) ;
}
但每次我编译并运行代码时,都会得到一些随机值。
例如:
Value of signal before sigfil is bf77c638
Value of signal after sigempty is 1a934000
Value of signal after sigfil is 1a934000
我在 Ubuntu 12.10 和 Fedora 上尝试过。我是不是漏掉了什么?
答案1
sigset_t 的定义应该给你一个线索,它不是一个简单的 int,它更复杂:
注意__val 内的单词数组。
# define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int)))
typedef struct
{
unsigned long int __val[_SIGSET_NWORDS];
} __sigset_t;
您可以尝试:
signal.__val[0];
请注意,您应该会在堆栈的初始打印中看到垃圾。
当然,你首先不应该查看这个结构,因为它应该是不透明的。但有时它对调试很有用。