Wie kann ich ein ctrl-c Ereignis zu fangen?
-
08-07-2019 - |
Frage
Wie fange ich eine Strg + C Veranstaltung in C ++?
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.