2010-09-21 7 views
7

Jak mogę odbierać odbiór sygnału wysłanego z sigqueue w programie c (na Linuksie)?Jak mogę otrzymać sygnał wysłany z sigqueue w programie c (na Linuksie)?

Jeśli wystarczy użyć zabić, aby przesłać sygnał po prostu dodać odbiornik coś takiego

signal(SIGUSR1, sigusr1); 

które wskazują na prostej funkcji takich jak to:

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

Ale jeśli mogę wysłać sygnał z sigqueue, jak bym wtedy zrobił?

Dzięki Johan


Dodaj sigaction:

struct sigaction action; 

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

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

Gdzie SIGUSR2 będzie wyglądać następująco:

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

I właśnie dla ref sigqueue przykładowy

sigval value; 

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

Odpowiedz

1

Użyj sigaction.

+1

Wygląda dobrze, nie masz też takiego przykładu? – Johan

+0

Niestety, ponieważ nie mam dużego doświadczenia w tej dziedzinie, nie wiem, ale będę szukał. –

+0

To może być to, czego chcesz. http://www.helsinki.fi/atk/unix/dec_manuals/DOC_40D/APS33DTE/DOCU_006.HTM#realtime-handler-sec –