sigfillset não está configurando bits de sinal

0

Estou tendo esse problema estranho! Meu código é muito simples.

    #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) ;    
} 

Mas toda vez que eu compilo e executo o código, estou obtendo alguns valores aleatórios.
Exemplo:

Value of signal before sigfil is bf77c638    
Value of signal after sigempty is 1a934000    
Value of signal after sigfil is 1a934000

Eu tentei isso no Ubuntu 12.10 e no Fedora. Estou faltando alguma coisa aqui?

    
por user2315033 25.02.2014 / 11:05

1 resposta

0

A definição de sigset_t deve lhe dar uma pista, não é um int simples, é mais complexo:

Observe a matriz de palavras dentro de __val.

# define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int)))
typedef struct
{
    unsigned long int __val[_SIGSET_NWORDS];
} __sigset_t;

Você pode tentar:

signal.__val[0];

Observe que você deve esperar lixo na impressão inicial da pilha.

É claro que você não deveria estar olhando para dentro dessa estrutura, já que é supostamente opaca. Mas é útil para depurar às vezes.

    
por Edward Groenendaal 21.05.2014 / 04:45