[C] Terminer un programme par Ctrl-c

Résolu
dasdqwjd -  
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai un programme qui tourne en boucle et j'aimerais pouvoir le stopper avec Ctrl-C par exemple. Dans un terminal, cette combinaison me stoppe le programme mais j'ai des fonctions à faire avant de quitter (vidage de mémoire entre autre).

Si vous avez des idées, elles sont bienvenue.

Merci beaucoup !

4 réponses

dasdqwjd
 
Il suffit de mettre : signal(SIGINT, stop_capturing);
4
Toufou13190 Messages postés 10694 Date d'inscription   Statut Membre Dernière intervention   806
 
Salut,
la solution la plus simple me semble être de rajouter une condition a ta boucle (loop while) en détectant l'appui sur une combinaison de touche et cette sortie de boucle déclenche l'exécution de tes fonctions avant d'arrêter le programme.

A+
0
dasdqwjd
 
Ok merci,
n'y a t'il pas des solutions utisant des signaux ?
0
Toufou13190 Messages postés 10694 Date d'inscription   Statut Membre Dernière intervention   806
 
Désolé trop compliqué pour mes faibles compétences.
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
oui, man signal

sighandler_t signal(int signum, sighandler_t handler);
ou signum est le N° du signal, pour ctrl-c : SIGQUIT 3 Core Quit from keyboard (man signal(7))
0
dasdqwjd
 
Merci pour votre réponse, pouvez vous me dire comment faire pour que ça attende le signal SIGQUIT ??
où le mettre dans mon programme ?

Merci encore
0
dasdqwjd > dasdqwjd
 
est-ce que ça s'utilise comme ça ? dans mon main j'ai mis : signal(SIGQUIT, stop_capturing);
stop_capturing étant la fonction que je souhaite lancer au moment de quitter.

J'ai testé et quand je fais Ctrl-C, ça ne marche pas, donc je dois me tromper ! :D
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637 > dasdqwjd
 
SIGQUIT ou SIGINT, je ne sais plus, essayer les 2.
la fonction stop_capturing doit terminer par exit(1); après avoir fait le ménage.
0