Вопрос

Как мне поймать Ctrl+C событие на C ++?

Это было полезно?

Решение

signal не самый надежный способ, поскольку он отличается реализацией. Я бы порекомендовал использовать sigaction. Код Тома теперь будет выглядеть так:

#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

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;    
}

Другие советы

Для консольного приложения Windows вы хотите использовать SetConsoleCtrlHandler обрабатывать CTRL + C и CTRL + BREAK .

См. здесь для пример.

Вы должны поймать СИГНАЛ сигнал (мы говорим о POSIX, верно?)

Смотрите ответ @Gab Royers на sigaction.

Пример:

#include <signal.h>
#include <stdlib.h>
#include <stdio.h>

void my_handler(sig_t s){
           printf("Caught signal %d\n",s);
           exit(1); 

}

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

   while(1);
   return 0;

}

Да, это вопрос, зависящий от платформы.

Если вы пишете консольную программу для POSIX, используйте API сигналов (#include < signal.h >).

В приложении GUI WIN32 вы должны обработать сообщение WM_KEYDOWN.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top