首页 文章

如何捕获ctrl-c事件?

提问于
浏览
110

如何在C中捕获Ctrl C事件?

4 回答

  • 45

    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;    
    }
    
  • 148

    对于Windows控制台应用程序,您希望使用SetConsoleCtrlHandler来处理CTRL C和CTRL BREAK .

    有关示例,请参见here .

  • 1

    你必须赶上SIGINT signal(我们正在谈论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;
    
    }
    
  • 26

    是的,这是一个平台相关的问题 .

    如果要在POSIX上编写控制台程序,请使用信号API(#include <signal.h>) .

    在WIN32 GUI应用程序中,您应该处理WM_KEYDOWN消息 .

相关问题