webentwicklung-frage-antwort-db.com.de

Wie kann ich ein CTRL-C-Ereignis erfassen?

Wie fange ich ein? Ctrl+C Veranstaltung in C++?

122
Scott

signal ist nicht die zuverlässigste Methode, da sie sich in den Implementierungen unterscheidet. Ich würde die Verwendung von sigaction empfehlen. Toms Code würde jetzt so aussehen:

#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;    
}
160
Gab Royer

Für eine Windows-Konsolenanwendung möchten Sie SetConsoleCtrlHandler verwenden CTRL+C und CTRL+BREAK.

Siehe hier für ein Beispiel.

48
Chris Smith

Sie müssen das SIGINT Signal (wir reden über POSIX, oder?)

Siehe @Gab Royers Antwort zur Unterschrift.

Beispiel:

#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;

}
32
Tom

Ja, das ist eine plattformabhängige Frage.

Wenn Sie ein Konsolenprogramm unter POSIX schreiben, verwenden Sie die Signal-API (#include <signal.h>).

In einer WIN32-GUI-Anwendung sollten Sie die WM_KEYDOWN-Nachricht verarbeiten.

1
Joyer