2011-02-25 7 views
8
struct sigaction psa; 

मैं मुख्य समारोह में मेरी संकेत हैंडलर सक्षम किया है, सक्षम करें मेरा सवाल कुछ लोगों के लिए स्पष्ट हो सकता है, जब मैं इसे चलाने के लिए मुद्रित डीबग लाइनों को क्यों नहीं देखा? वास्तव में, कुछ भी मुद्रित नहीं किया गया था। मुझे यह समझने में मदद करने के लिए बहुत बहुत धन्यवाद। मैं इसे लिनक्स पर चला रहा हूं, कार्यक्रम के लिए एक्लिप्स का इस्तेमाल किया।जिन्हें आप नीचे एक संकेत हैंडलर सी में sigaction का उपयोग कर

उत्तर

10
#include <stdio.h> 
#include <signal.h> 

static void pSigHandler(int signo){ 
    switch (signo) { 
      case SIGTSTP: 
      printf("TSTP"); 
      fflush(stdout); 
      break; 
    } 
} 

int main(void) 
{ 
    struct sigaction psa; 
    psa.sa_handler = pSigHandler; 
    sigaction(SIGTSTP, &psa, NULL); 
    for(;;) {} 
    return 0; 
} 

क्योंकि आप (stdout) fflush को

सी जेड

मैं भी यकीन है कि अगर यह हालांकि एक संकेत हैंडलर में stdio उपयोग करने के लिए सुरक्षित है नहीं कर रहा हूँ के साथ की कोशिश की जरूरत है।

अद्यतन: http://bytes.com/topic/c/answers/440109-signal-handler-sigsegv

कि लिंक के अनुसार, यदि आप ऐसा नहीं करना चाहिए।

+0

मैंने fflush (stdout) में जोड़ने की कोशिश की; अभी भी कुछ भी प्रिंट नहीं किया है, मैंने अपने प्रोग्राम में अन्य कोडों पर टिप्पणी की है, इसलिए यह अनंत लूप के बिना, उपरोक्त जैसा ही दिखता है। कोई विचार? धन्यवाद टॉम। – txs

+0

मेरे कोड नमूने में, fflush प्रिंटिंग के बीच अंतर बनाता है या नहीं। मुझे लगता है कि ऐप को आपके सिग्नल नहीं मिल रहे हैं? क्या तुमने मेरी कोशिश की है? मुझे लगता है कि यह किसी भी तरह से अपरिभाषित व्यवहार हो सकता है, नीचे दिए गए लिंक में कुछ जानकारी है जो बताती है कि आपको केवल कुछ चीजें करने की ज़रूरत है ... यह आपके सिस्टम के दस्तावेज़ों में होना चाहिए। –

+0

आप यह भी उल्लेख करते हैं कि आपने अनंत लूप को हटा दिया --- यदि वह नहीं है, तो कोड बाहर निकल जाएगा और सिग्नल हैंडलर चले जाएंगे ... आपको ब्लॉक करने और संकेतों की प्रतीक्षा करने की आवश्यकता है ... –

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