2010-09-21 13 views
7

Bir c programında (linux) sigqueue ile gönderilen bir sinyali nasıl alırım?Bir c programında (linux) sigqueue ile gönderilen bir sinyali nasıl alırım?

Sadece sinyal göndermek için öldürmek kullanırsanız sadece bu gibi basit bir işleve işaret bu

signal(SIGUSR1, sigusr1); 

gibi bir şey ile bir alıcı ekleyin:

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

Ama bir sinyal gönderirseniz sigqueue ile nasıl yaparım?

Teşekkür Johan


bir sigaction ekleyin:

struct sigaction action; 

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

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

SIGUSR2 şöyle görünecektir:

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

Ve sadece ref bir sigqueue örnek

sigval value; 

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

cevap

1

kullanın sigaction.

+1

İyi görünüyor, sizde de bir örneğiniz yok mu? – Johan

+0

Maalesef bu alanda fazla tecrübem olmadığı için, ben bir tane arayacağım. –

+0

İstediğiniz bu olabilir. http://www.helsinki.fi/atk/unix/dec_manuals/DOC_40D/APS33DTE/DOCU_006.HTM#realtime-handler-sec –

İlgili konular