2012-05-12 11 views
6

necesito para manejar algunas señales con sigaction, pero cuando compilo mi código me sale este error:señal de la manija con sigaction

warning: assignment from incompatible pointer type

el código es:

struct sigaction hup_act; 
... 
hup_act.sa_flags=SA_SIGINFO; 
hup_act.sa_sigaction = sighupHandler; 
sigaction(SIGHUP, &hup_act, NULL); 

advertencia está en hup_act. tarea de sa_sigaction Esta advertencia causa un error de segmentación cuando envío un suspiro a mi aplicación.

+3

Por favor, muestre la declaración de su función sighupHandler. Probablemente sea un tipo incorrecto. – SKi

+0

void sighupHandler (siginfo_t * info) – giozh

+1

'void sighupHandler (int, siginfo_t *, void *);' –

Respuesta

6

Si SA_SIGINFO se encuentra en struct sigaction 's miembro sa_flags utilizar un método de tipo

void signalhandler(int, siginfo_t *, void *); 

como función de controlador que se asignará a struct sigaction' s miembro de sa_sigaction

else utiliza un método del tipo

void signalhandler(int); 

como función de controlador que se asignará al miembro struct sigaction 's sa_handler.

5

Su sighupHandler debe ser uno de los dos siguientes:

void sighupHandler(int) //for sa_handler 

o

void sighupHandler(int, signinfo_t *, void *) //for sa_sigaction which is your case 

Para obtener más información acerca de la referencia here y here

EDIT: Por favor, consulte a continuación y mi enlaces sugeridos arriba para una mejor claridad. Creo que en su caso debido al almacenamiento común como se sugiere a continuación, el compilador solo está generando una advertencia, de lo contrario habría generado un error.

The sigaction structure is defined as something like:

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

On some architectures a union is involved: do not assign to both sa_handler and sa_sigaction .

+2

'.sa_restorer' es obsoleto y no es POSIX. Es mejor no incluirlo en ejemplos. – moshbear

Cuestiones relacionadas