"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > सिगेक्शन फ़ंक्शन के साथ C++ में Ctrl-C इंटरप्ट को खूबसूरती से कैसे संभालें?

सिगेक्शन फ़ंक्शन के साथ C++ में Ctrl-C इंटरप्ट को खूबसूरती से कैसे संभालें?

2024-11-17 को प्रकाशित
ब्राउज़ करें:834

How to Gracefully Handle Ctrl-C Interrupts in C   with the Sigaction Function?

सी में Ctrl-C इवेंट को इंटरसेप्ट करना

Ctrl-C इवेंट को इंटरसेप्ट करना प्रोग्रामिंग में एक आवश्यक कार्य है, खासकर जब आप शालीनता से जवाब देना चाहते हैं अप्रत्याशित रुकावटें.

सिगेक्शन का उपयोग करना

सी में, सिग्नल को संभालने के लिए सिगेक्शन फ़ंक्शन का उपयोग करना अधिक विश्वसनीय है। सिंटैक्स इस प्रकार है:

int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);

कहां:

  • signum: to संसाधित किया जाना चाहिए Ctrl-C, SIGINT के लिए सिग्नल की संख्या।
  • act: नए सिग्नल हैंडलर की कार्रवाई निर्दिष्ट करता है।
  • oldact: पिछले व्यवहार को संग्रहीत करता है।

थॉमस द्वारा दिए गए उदाहरण में, सिगेक्शन संरचना इस प्रकार है:

struct sigaction sigIntHandler;

sigIntHandler.sa_handler = my_handler;
sigemptyset(&sigIntHandler.sa_mask);
sigIntHandler.sa_flags = 0;

कहाँ:

  • sa_handler: हैंडलर फ़ंक्शन को इंगित करता है।
  • sa_mask: इस सिग्नल के प्रसंस्करण के दौरान रोकने के लिए सिग्नल मास्क।
  • sa_flags: अतिरिक्त झंडे, आमतौर पर 0।

SIGINT सिग्नल के साथ इस सिगेक्शन संरचना का उपयोग करें:

sigaction(SIGINT, &sigIntHandler, NULL);

Handler function

आखिरकार, आपको सिग्नल का जवाब देने के लिए एक हैंडलर फ़ंक्शन की आवश्यकता है। उदाहरण में, my_handler बस एक संदेश प्रिंट करता है और प्रोग्राम से बाहर निकल जाता है:

void my_handler(int s){
   printf("Caught signal %d\n", s);
   exit(1);
}

पूर्ण कोड

निम्नलिखित संपूर्ण कोड है जो Ctrl-C ईवेंट को कैप्चर करने के लिए सिगेक्शन का उपयोग करता है:

#include 
#include 
#include 
#include 

void my_handler(int s){
           printf("Caught signal %d\n",s);
           exit(1); 

}

int main(int argc,char** argv)
{

   struct sigaction sigIntHandler;

   sigIntHandler.sa_handler = my_handler;
   sigemptyset(&sigIntHandler.sa_mask);
   sigIntHandler.sa_flags = 0;

   sigaction(SIGINT, &sigIntHandler, NULL);

   pause();

   return 0;    
}

सिगेक्शन का उपयोग करके आप विश्वसनीय रूप से Ctrl-C घटनाओं को पकड़ सकते हैं और उचित कार्रवाई कर सकते हैं।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3