मेरा मामला बहुत आसान है: मैं अपने सी ++ प्रोग्राम यूनिक्स सिग्नल से निपटने के लिए चाहता हूं। ऐसा करने के लिए, glibc सिग्नल.h में एक फ़ंक्शन प्रदान करता है जिसे sigaction
कहा जाता है, जो फ़ंक्शन पॉइंटर को इसके दूसरे तर्क के रूप में प्राप्त करने की अपेक्षा करता है।सी लाइब्रेरी के लिए सी लिंकेज सी पुस्तकालय
extern "C"
{
void uponSignal(int);
}
void uponSignal(int)
{
// set some flag to quit the program
}
static
void installSignalHandler()
{
// initialize the signal handler
static struct sigaction sighandler;
memset(&sighandler, 0, sizeof(struct sigaction));
sighandler.sa_handler = uponSignal;
// install it
sigaction(SIGINT, &sighandler, nullptr);
}
मेरा प्रश्न है: extern "C"
लिंकेज विनिर्देशक आवश्यक है?
बोनस प्रश्न: क्या सिग्नल static
घोषित किया जा सकता है?
कुछ कंपाइलर्स इसे संकलित करने से इंकार कर देंगे यदि आप 'बाहरी "सी' 'को हटाते हैं क्योंकि सिग्नेशन के दूसरे तर्क में गलत प्रकार है। यह कई कंपाइलर्स में एक बग है कि वे फ़ंक्शन प्रकार के लिंकेज हिस्से पर विचार नहीं करते हैं। –