如何在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消息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top