Comment puis-je attraper un Ctrl+C événement en C++?
signal
n'est pas le moyen le plus fiable car il diffère dans les implémentations. Je recommanderais d'utiliser sigaction
. Le code de Tom ressemblerait maintenant à ceci:
#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;
}
Pour une application de console Windows, vous souhaitez utiliser SetConsoleCtrlHandler pour gérer CTRL+C et CTRL+BREAK.
Voir ici pour un exemple.
Vous devez attraper le SIGINT signal (nous parlons de POSIX, n'est-ce pas?)
Voir la réponse de @Gab Royer pour la sigaction.
Exemple:
#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;
}
Oui, c'est une question dépendante de la plateforme.
Si vous écrivez un programme console sur POSIX, utilisez l’API du signal (#include <signal.h>).
Dans une application graphique WIN32, vous devez gérer le message WM_KEYDOWN.