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];
Обратите внимание, что вы должны ожидать мусора в начальной печати из стека.
Конечно, вы не должны искать в этой структуре в первую очередь, поскольку она должна быть непрозрачной. Но иногда это полезно для отладки.