Защита от Ctrl+C - C (СИ)
Формулировка задачи:
Здравствуйте, пишу консольную программу на языке Си и встретился с проблемой того что, если при вводе в поток нажать Ctrl+C, или Ctrl+Z программа крашнет или сработает так как не было задумано, как можно перехватить это исключение или исправить, но только на Си, не С++.
Решение задачи: «Защита от Ctrl+C»
textual
Листинг программы
#include <stdio.h> #include <signal.h> #include <string.h> void ctrl_c_handler(int signum) { printf("\nНе-не-не! Даёшь пиченку!\n"); } int main(void) { char buf[BUFSIZ]; if ( signal(SIGINT, ctrl_c_handler) == SIG_ERR ) return 1; while ( printf("Хачю амерекансую пиченку! ") && fgets(buf, BUFSIZ, stdin) && strcmp("cookie\n", buf) ) ; return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек:
, , - Определение функции обработчика сигнала SIGINT - ctrl_c_handler
- Установка обработчика сигнала SIGINT на функцию ctrl_c_handler
- Создание буфера для чтения данных из стандартного ввода (stdin)
- Запуск цикла, который будет выполняться до тех пор, пока пользователь не введет
cookie\n
- Внутри цикла выводится сообщение
Хачю амерекансую пиченку!
- С помощью функции fgets считывается строка из стандартного ввода (stdin) в буфер buf
- С помощью функции strcmp сравнивается введенная строка с
cookie\n
- Если строки равны, то цикл прекращается
- Если цикл прекращается, то программа завершается с кодом возврата 0
- Если цикл не прекращается, то программа продолжает работать, считывая новые строки из стандартного ввода (stdin)
- Если пользователь нажимает Ctrl+C, то программа вызывает функцию обработчика сигнала SIGINT - ctrl_c_handler
- В функции ctrl_c_handler выводится сообщение
Не-не-не! Даёшь пиченку!
- Если пользователь вводит что-то еще, кроме
cookie\n
, то программа продолжает выводить сообщениеХачю амерекансую пиченку!
и считывать строки из стандартного ввода (stdin) - Если пользователь вводит
cookie\n
, то программа прекращает выполнение цикла и завершается с кодом возврата 0 - Если программа завершается с кодом возврата 1, то это означает, что произошла ошибка при установке обработчика сигнала SIGINT
- Если программа завершается с кодом возврата 0, то это означает, что все прошло успешно
- Код программы написан на языке C
- Максимальное количество элементов в списке - 20
- Номер элемента списка: 19
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д