Comment puis-je attraper un événement ctrl-c?
-
08-07-2019 - |
Question
Comment attraper un événement Ctrl + C en C ++?
La solution
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;
}
Autres conseils
Pour une application de console Windows, vous souhaitez utiliser SetConsoleCtrlHandler . manipuler CTRL + C et CTRL + BREAK .
Voir ici pour un exemple.
Vous devez capturer le signal de SIGINT (nous parlons bien de POSIX?)
Voir la réponse de @Gab Royer & # 180; pour 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, cette question dépend de la plate-forme.
Si vous écrivez un programme console sur POSIX, utilisez l'API de signal (#include < signal.h >).
Dans une application graphique WIN32, vous devez gérer le message WM_KEYDOWN.