2010-11-30 29 views
1

J'utilise sigaction pour un signal et j'utilise une structure simple pour cela. En fait, je l'ai pris de la page de manuel. Quelqu'un peut-il m'expliquer ce que fait la deuxième ligne dans la structure? En outre il y a une erreur là:Utilisation et interprétation de Sigaction

error: expected declaration specifiers or '...' before 'siginfo_t' 



#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 
#include <stdlib.h> 
#include <math.h> 
#include <unistd.h> 
#include <assert.h> 
#include <getopt.h> 

#include <signal.h> 
#include <sys/time.h> 

#define _POSIX_C_SOURCE 200112L 
#define MAX_WORD 256 

void parseFile (FILE * fp, FILE *sketcher); 
void handle_timeout(int signal); 


struct sigaction { 
void  (*sa_handler)(int); 
    void  (*sa_sigaction)(int, siginfo_t *, void *); 
    sigset_t sa_mask; 
    int  sa_flags; 
    void  (*sa_restorer)(void); 
}; 
+0

Sur certaines architectures, une union est impliquée: ne pas affecter à la fois sa_handler et sa_sigaction. On dirait qu'ils sont identiques? – wliao

Répondre

3

Vous n'êtes pas censé déclarer vous-même struct sigaction. Il est fourni dans la page de manuel pour votre information, mais il est en fait déclaré par <signal.h>.

La deuxième ligne de la structure définit un pointeur de fonction (comme le premier, mais avec un type différent).

+0

Merci. J'aurais dû lire plus attentivement la page de manuel. :) –