sigfillset 未设置信号位

sigfillset 未设置信号位

我遇到了这个奇怪的问题!我的代码非常简单。

    #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];

请注意,您应该会在堆栈的初始打印中看到垃圾。

当然,你首先不应该查看这个结构,因为它应该是不透明的。但有时它对调试很有用。

相关内容