ctrl-c 이벤트를 어떻게 잡을 수 있습니까? C ++에서 Ctrl+ C이벤트를 어떻게

C ++에서 Ctrl+ C이벤트를 어떻게 잡을 수 있습니까?



답변

signal구현이 다르기 때문에 가장 신뢰할 수있는 방법은 아닙니다. 을 사용하는 것이 좋습니다 sigaction. Tom의 코드는 이제 다음과 같습니다.

#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 + CCTRL+ 를 처리 하려고합니다 BREAK.

예를 보려면 여기 를 참조 하십시오 .


답변

SIGINT 신호 를 잡아야합니다 (POSIX와 올바르게 대화하고 있습니까?)

sigaction에 대해서는 @Gab Royer의 답변을 참조하십시오.

예:

#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>)를 사용하십시오 .

WIN32 GUI 응용 프로그램에서는 WM_KEYDOWN메시지를 처리해야 합니다.