Защита от 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;   
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек: , ,
  2. Определение функции обработчика сигнала SIGINT - ctrl_c_handler
  3. Установка обработчика сигнала SIGINT на функцию ctrl_c_handler
  4. Создание буфера для чтения данных из стандартного ввода (stdin)
  5. Запуск цикла, который будет выполняться до тех пор, пока пользователь не введет cookie\n
  6. Внутри цикла выводится сообщение Хачю амерекансую пиченку!
  7. С помощью функции fgets считывается строка из стандартного ввода (stdin) в буфер buf
  8. С помощью функции strcmp сравнивается введенная строка с cookie\n
  9. Если строки равны, то цикл прекращается
  10. Если цикл прекращается, то программа завершается с кодом возврата 0
  11. Если цикл не прекращается, то программа продолжает работать, считывая новые строки из стандартного ввода (stdin)
  12. Если пользователь нажимает Ctrl+C, то программа вызывает функцию обработчика сигнала SIGINT - ctrl_c_handler
  13. В функции ctrl_c_handler выводится сообщение Не-не-не! Даёшь пиченку!
  14. Если пользователь вводит что-то еще, кроме cookie\n, то программа продолжает выводить сообщение Хачю амерекансую пиченку! и считывать строки из стандартного ввода (stdin)
  15. Если пользователь вводит cookie\n, то программа прекращает выполнение цикла и завершается с кодом возврата 0
  16. Если программа завершается с кодом возврата 1, то это означает, что произошла ошибка при установке обработчика сигнала SIGINT
  17. Если программа завершается с кодом возврата 0, то это означает, что все прошло успешно
  18. Код программы написан на языке C
  19. Максимальное количество элементов в списке - 20
  20. Номер элемента списка: 19

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 5 из 5