Перехват событий Ctrl-C в C
Перехват событий Ctrl-C — необходимая задача в программировании, особенно если вы хотите корректно реагировать на неожиданные перерывы.
Использование Sigaction
В C более надежно использовать функцию sigaction для обработки сигналов. Синтаксис следующий:
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
где:
В примере, приведенном Томасом, структура sigaction выглядит следующим образом:
struct sigaction sigIntHandler; sigIntHandler.sa_handler = my_handler; sigemptyset(&sigIntHandler.sa_mask); sigIntHandler.sa_flags = 0;
где:
Используйте эту структуру sigaction с сигналом SIGINT:
sigaction(SIGINT, &sigIntHandler, NULL);
Функция-обработчик
Наконец, вам нужна функция-обработчик для ответа на сигнал. В этом примере my_handler просто печатает сообщение и выходит из программы:
void my_handler(int s){ printf("Caught signal %d\n", s); exit(1); }
Полный код
Ниже приведен полный код, который использует sigaction для захвата событий 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; }
Используя sigaction, вы можете надежно перехватывать события Ctrl-C и предпринимать соответствующие действия.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3