145

CtrlC++ で+Cイベントをキャッチするにはどうすればよいですか?

4

4 に答える 4

183

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;    
}
于 2009-10-29T01:55:37.923 に答える
58

Windows コンソール アプリの場合、SetConsoleCtrlHandlerCTRLを使用して+CCTRL+を処理しBREAKます。

例については、こちらを参照してください。

于 2009-10-29T02:29:12.567 に答える
42

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;

}
于 2009-10-29T01:41:19.287 に答える
1

ええ、これはプラットフォームに依存する質問です。

POSIX でコンソール プログラムを作成している場合は、シグナル API ( #include <signal.h>) を使用します。

WIN32 GUI アプリケーションでは、WM_KEYDOWNメッセージを処理する必要があります。

于 2009-10-29T01:56:36.190 に答える