如何在 C + + 中捕获 Ctrl + C事件?
您必须捕捉 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; }
signal不是最可靠的方法,因为它在实现上有所不同。我建议使用 sigaction。Tom 的代码现在应该是这样的:
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; }
是的,这是一个平台相关的问题。
如果您在 POSIX 上编写控制台程序, 使用信号 API (#include <signal.h>)。
#include <signal.h>
在 WIN32GUI 应用程序中,您应该处理 WM_KEYDOWN消息。
WM_KEYDOWN
对于 Windows 控制台应用程序,您希望使用 SetConsole CtrlHandler来处理 CTRL + C和 CTRL + BREAK。
有关示例,请参见 给你。