Frage

Wie fange ich eine Strg + C Veranstaltung in C ++?

War es hilfreich?

Lösung

signal ist nicht der zuverlässigste Weg, wie es in Implementierungen unterscheidet. Ich würde empfehlen, sigaction verwenden. Tom Code aussehen würde nun wie folgt aus:

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

Andere Tipps

Für eine Windows-Konsole-Anwendung, die Sie wollen SetConsoleCtrlHandler behandeln STRG + C und STRG + BREAK .

Siehe hier ein Beispiel.

Sie haben die SIGINT Signal zu fangen (wir sprechen POSIX nicht wahr?)

Siehe @Gab Royer's Antwort für sigaction.

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;

}

Ja, das ist eine plattformabhängige Frage.

Wenn Sie ein Konsolenprogramm auf POSIX schreiben, verwenden, um den Signal-API (# include ).

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top