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

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

112 голосов | спросил Scott 29 +03002009-10-29T04:39:02+03:00312009bEurope/MoscowThu, 29 Oct 2009 04:39:02 +0300 2009, 04:39:02

4 ответа


0

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;    
}
ответил Gab Royer 29 +03002009-10-29T04:55:37+03:00312009bEurope/MoscowThu, 29 Oct 2009 04:55:37 +0300 2009, 04:55:37
0

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

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

ответил Chris Smith 29 +03002009-10-29T05:29:12+03:00312009bEurope/MoscowThu, 29 Oct 2009 05:29:12 +0300 2009, 05:29:12
0

Вы должны поймать сигнал 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;

}
ответил Tom 29 +03002009-10-29T04:41:19+03:00312009bEurope/MoscowThu, 29 Oct 2009 04:41:19 +0300 2009, 04:41:19
0

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

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

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

ответил Joyer 29 +03002009-10-29T04:56:36+03:00312009bEurope/MoscowThu, 29 Oct 2009 04:56:36 +0300 2009, 04:56:36

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132