2010-09-21 57 views
7

如何接收在c程序(在Linux上)使用sigqueue發送的信號?如何接收在c程序(在Linux上)使用sigqueue發送的信號?

如果只是用殺人來發送信號我只需添加一個接收器像這樣的東西

signal(SIGUSR1, sigusr1); 

指向一個簡單的函數是這樣的:

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

但是,如果我發出信號用sigqueue,我會怎麼做呢?

感謝 約翰


添加的sigaction:

struct sigaction action; 

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

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

凡SIGUSR2會是這個樣子:

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

和公正的裁判一個sigqueue例如

sigval value; 

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

回答

1

使用sigaction

+1

看起來不錯,你碰巧也沒有例子嗎? – Johan 2010-09-21 10:53:26

+0

不幸的是,由於我在這個領域沒有太多的經驗,我沒有,但我會尋找一個。 – 2010-09-21 10:54:07

+0

這可能是你想要的。 http://www.helsinki.fi/atk/unix/dec_manuals/DOC_40D/APS33DTE/DOCU_006.HTM#realtime-handler-sec – 2010-09-21 10:55:39

相關問題