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

Обратите внимание, что вы должны ожидать мусора в начальной печати из стека.

Конечно, вы не должны искать в этой структуре в первую очередь, поскольку она должна быть непрозрачной. Но иногда это полезно для отладки.

Другие вопросы по тегам