2010-09-21 10 views
7

¿Cómo puedo recibir una señal enviada con sigqueue en un programa c (en Linux)?¿Cómo recibo una señal enviada con sigqueue en un programa c (en Linux)?

Si sólo tiene que utilizar matar a enviar una señal Acabo de añadir un receptor con algo como esto

signal(SIGUSR1, sigusr1); 

que apuntan a una función simple como esto:

void sigusr1() 
{ 
    signal(SIGUSR1,sigusr1); 
    printf("SIGUSR1 ....\n"); 
} 

Pero si envío una señal con sigqueue, ¿cómo lo haría entonces?

Gracias Johan


Añadir un sigaction:

struct sigaction action; 

action.sa_flags = SA_SIGINFO; 
action.sa_sigaction = &sigusr2; 

if (sigaction(SIGUSR2, &action, NULL) == -1) { 
    perror("sigusr: sigaction"); 
    _exit(1); 
} 

Dónde SIGUSR2 sería algo como esto:

void sigusr2(int signo, siginfo_t *info, void *extra) 
{ 
     void *ptr_val = info->si_value.sival_ptr; 
     int int_val = info->si_value.sival_int; 
     printf("Signal %d, value %d \n", signo, int_val); 
} 

Y sólo por ref un ejemplo sigqueue

sigval value; 

for(int i=10;i<20;i++) 
{ 
    value.sival_int = i; 
    sigqueue(pid,SIGUSR2, value); 
} 

Respuesta

1

Use sigaction.

+1

Se ve bien, ¿no tienes un ejemplo también? – Johan

+0

Desafortunadamente, como no tengo mucha experiencia en esta área, no lo hago, pero buscaré una. –

+0

Esto puede ser lo que quieres. http://www.helsinki.fi/atk/unix/dec_manuals/DOC_40D/APS33DTE/DOCU_006.HTM#realtime-handler-sec –

Cuestiones relacionadas