[C] Terminer un programme par Ctrl-c

Résolu/Fermé
dasdqwjd - 6 août 2008 à 19:23
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 8 août 2008 à 11:10
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

Il suffit de mettre : signal(SIGINT, stop_capturing);
4
Toufou13190 Messages postés 10690 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 21 septembre 2015 806
6 août 2008 à 19:28
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
Ok merci,
n'y a t'il pas des solutions utisant des signaux ?
0
Toufou13190 Messages postés 10690 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 21 septembre 2015 806
6 août 2008 à 19:43
Désolé trop compliqué pour mes faibles compétences.
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
7 août 2008 à 09:39
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
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
7 août 2008 à 20:26
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615 > dasdqwjd
8 août 2008 à 11:10
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