Rechercher : dans
Par :

[C] Terminer un programme par Ctrl-c

Dernière réponse le 8 aoû 2008 à 11:10:40 dasdqwjd, le 6 aoû 2008 à 19:23:01 
 Signaler ce message aux modérateurs

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 !

Configuration: Linux
Firefox 3.0.1

Meilleures réponses pour « [C] Terminer un programme par Ctrl c » dans :
Compiler du C sous Linux/UNIX VoirSous Linux, le compilateur de C est gcc. Il est installé de base sur plusieurs distributions, mais sur Debian (et celles qui en découlent) il faudra l'installer (aptitude install gcc). gcc Syntaxe de GCC gcc Tout d'abord, il faut savoir...
Caractéristiques du langage C VoirLe fichier source Le fichier source d'un programme écrit en langage C est un simple fichier texte dont l'extension est par convention .c. Note d'un visiteur (J.Grondin) : L'extension est en minuscules. Le .C (majuscule) est interprété par...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...

1

Toufou13190, le 6 aoû 2008 à 19:28:30

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+ Le savoir n'est utile que s'il est partagé !
Windows XP SP2 - Freebox V5 - Serveur NAS

Répondre à Toufou13190

2

dasdqwjd, le 6 aoû 2008 à 19:37:47

Ok merci,
n'y a t'il pas des solutions utisant des signaux ?

Répondre à dasdqwjd

3

Toufou13190, le 6 aoû 2008 à 19:43:28

Désolé trop compliqué pour mes faibles compétences.
Le savoir n'est utile que s'il est partagé !
Windows XP SP2 - Freebox V5 - Serveur NAS

Répondre à Toufou13190

4

dubcek, le 7 aoû 2008 à 09:39:42

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))

Répondre à dubcek

5

dasdqwjd, le 7 aoû 2008 à 20:15:59

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

Répondre à dasdqwjd

6

dasdqwjd, le 7 aoû 2008 à 20:26:09

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

Répondre à dasdqwjd

8

 dubcek, le 8 aoû 2008 à 11:10:40

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.

Répondre à dubcek

7

dasdqwjd, le 7 aoû 2008 à 23:05:40

Il suffit de mettre : signal(SIGINT, stop_capturing);

Répondre à dasdqwjd