Как я могу поймать событие ctrl-c?

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

112

Решение

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

Другие решения

Для консольного приложения Windows вы хотите использовать SetConsoleCtrlHandler обрабатывать CTRL+С а также CTRL+ПЕРЕРЫВ.

Увидеть Вот для примера.

45

Вы должны поймать SIGINT сигнал (мы говорим о POSIX, верно?)

Смотрите ответ @Gab Royer для 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;

}
26

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

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

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

1
По вопросам рекламы [email protected]