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 + C및 CTRL+ 를 처리 하려고합니다 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
메시지를 처리해야 합니다.