如何捕获ctrl-c事件?
-
08-07-2019 - |
题
如何在C ++中捕获 Ctrl + 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 。
请参阅此处了解一个例子。
你必须赶上SIGINT 信号(我们正在谈论POSIX吗?)
请参阅@Gab Royer <!>#180; s saction的答案。
示例:
#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 <!> lt; signal.h <!> gt;)。
在WIN32 GUI应用程序中,您应该处理WM_KEYDOWN消息。
不隶属于 StackOverflow