উত্তর:
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()
অ্যাসিঙ্ক-সিগন্যাল-নিরাপদ নয়, তাই সংকেত হ্যান্ডলারের অভ্যন্তরে ব্যবহার করা যাবে না।
sa_mask
এবং সম্পর্কে কিছু ব্যাখ্যা আছে ভাল হবে sa_flags
।
উইন্ডোজ কনসোল অ্যাপ্লিকেশানের জন্য, আপনি + এবং + পরিচালনা করতে সেটকনসোলসিআরটিএল হ্যান্ডলার ব্যবহার করতে চান ।CTRLCCTRLBREAK
একটি উদাহরণের জন্য এখানে দেখুন ।
আপনাকে সিগিন্ট সিগন্যাল ধরতে হবে (আমরা ঠিক পসিক্সের সাথে কথা বলছি?)
ক্লান্তির জন্য @ গ্যাব রয়েরের উত্তর দেখুন।
উদাহরণ:
#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)
।