2010-09-21 7 views
7

मुझे सी प्रोग्राम (लिनक्स पर) में सिग्कुए के साथ भेजे गए सिग्नल को कैसे प्राप्त किया जा सकता है?मुझे सी प्रोग्राम (लिनक्स पर) में सिग्कुए के साथ भेजे गए सिग्नल को कैसे प्राप्त किया जा सकता है?

हैं, बस का उपयोग एक संकेत भेजने के लिए मारने मैं सिर्फ इस

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

+0

दुर्भाग्य से मेरे पास इस क्षेत्र में ज्यादा अनुभव नहीं है, मैं नहीं करता, लेकिन मैं एक की तलाश करूंगा। –

+0

यह वही हो सकता है जो आप चाहते हैं। http://www.helsinki.fi/atk/unix/dec_manuals/DOC_40D/APS33DTE/DOCU_006.HTM#realtime-handler-sec –

संबंधित मुद्दे

 संबंधित मुद्दे