Comment attraper un Ctrl + C en C++ ?
Je pense que mon_handler devrait prendre int s
comme argument. sig_t
est lui-même un type de pointeur de fonction.
Comment attraper un Ctrl + C en C++ ?
signal
n'est pas le moyen le plus fiable car il diffère selon les implémentations. Je recommande 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;
}
Je pense que mon_handler devrait prendre int s
comme argument. sig_t
est lui-même un type de pointeur de fonction.
Cela fonctionne sous OSX. Dans mon fichier main.mm, je n'ai même pas eu besoin d'inclure signal.h, stdlib.h, ou unistd.h. J'ai juste inclus stdio.h et Foundation/Foundation.h, et ensuite si j'avais besoin de faire des trucs de type std::cout pour sortir un message d'arrêt, j'ai inclus iostream.
Pour une application console Windows, vous voulez 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 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;
}
Signal() se comporte différemment, selon qu'il suit le style BSD ou SysV. sigaction() est préférable.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Application console, application Windows, ou quoi ?
9 votes
Quel OS : Windows, Linux, etc.
1 votes
C'est une application Qt, mais je l'exécute depuis la console pendant le développement. (C'est Linux)