जवाबों:
signal
सबसे विश्वसनीय तरीका नहीं है क्योंकि यह कार्यान्वयन में भिन्न है। मैं उपयोग करने की सलाह दूंगा sigaction
। टॉम का कोड अब इस तरह दिखेगा:
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
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;
}
int s
तर्क के रूप में लेना चाहिए । sig_t
अपने आप में एक फ़ंक्शन पॉइंटर प्रकार है।
printf()
async-signal-safe नहीं है, इसलिए सिग्नल हैंडलर के अंदर उपयोग नहीं किया जा सकता है।
sa_mask
और अच्छा होगा sa_flags
।
Windows कंसोल ऐप के लिए, आप + और + को संभालने के लिए SetConsoleCtrlHandler का उपयोग करना चाहते हैं ।CTRLCCTRLBREAK
एक उदाहरण के लिए यहाँ देखें ।
आपको SIGINT सिग्नल पकड़ना होगा (हम POSIX सही बात कर रहे हैं?)
देखिए @ गाब रॉयरे की जवाबदारी के लिए।
उदाहरण:
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
void my_handler(sig_t s){
printf("Caught signal %d\n",s);
exit(1);
}
int main(int argc,char** argv)
{
signal (SIGINT,my_handler);
while(1);
return 0;
}
void my_handler(sig_t s)
करने के लिए void my_handler(sig_atomic_t s)
।