اعتراض أحداث Ctrl-C في لغة C
يعد اعتراض أحداث Ctrl-C مهمة ضرورية في البرمجة، خاصة عندما تريد الاستجابة برشاقة لـ انقطاعات غير متوقعة.
استخدام Sigaction في لغة C، يعد استخدام وظيفة sigaction للتعامل مع الإشارات أكثر موثوقية. بناء الجملة كما يلي:
int sigaction(int Signum, const struct sigaction *act, struct sigaction *oldact);
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);signum: to تتم معالجة رقم الإشارة، لـ Ctrl-C، SIGINT.
struct sigaction sigIntHandler; sigIntHandler.sa_handler = my_handler; sigemptyset(&sigIntHandler.sa_mask); sigIntHandler.sa_flags = 0;
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);sa_handler: يشير إلى وظيفة المعالج.
sigaction (SIGINT، &sigIntHandler، NULL)؛
sigaction(SIGINT, &sigIntHandler, NULL);وظيفة المعالج
أخيرًا، أنت بحاجة إلى وظيفة معالج للرد على الإشارة. في المثال، يقوم my_handler فقط بطباعة رسالة والخروج من البرنامج:
void my_handler(int s){ printf("الإشارة التي تم التقاطها %d\n", s); خروج (1)؛
void my_handler(int s){ printf("Caught signal %d\n", s); exit(1); }الكود الكامل
ما يلي هو الكود الكامل الذي يستخدم sigaction لالتقاط أحداث Ctrl-C:
#include
#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; }
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3