Как предотвратить завершение консольного приложения при нажатии клавиши "Ctrl+C"в C?


Я обнаружил, что консольное приложение, скомпилированное из GCC на Windows, всегда завершается при нажатии Ctrl+C.

Существует ли какой-либо возможный способ предотвратить завершение консольного приложения при нажатии кнопки Ctrl+C?

2 2

2 ответа:

Когда пользователь нажимает control C, в ваш процесс отправляется сигнал (SIGINT). Когда большинство сигналов отправляется процессу, этот процесс должен либо обработать сигнал, либо операционная система его уничтожит. Так... все, что вам нужно сделать, это установить обработчик сигналов для SIGINT.

Непроверено следующее:

#include <signal.h>
static void ignore_control_c(int sig)
{
    /* re-arm the signal handler but otherwise ignore the signal */
    signal(sig, ignore_control_c);
}

int main(int argc, char *argv)
{
   signal(SIGINT, ignore_control_c);
   ...

Установите обработчик SIGINT. По умолчанию этот обработчик настроен на завершение процесса. Для windows можно зарегистрироваться с помощью специфичного Win32 SetConsoleCtrlHandler(..).

Взгляните на документацию, связанную выше, и особенно на пример.