[C] Terminer un programme par Ctrl-c

Résolu
dasdqwjd -  
dubcek Messages postés 18627 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 !
Configuration: Linux
Firefox 3.0.1

4 réponses

  1. dasdqwjd
     
    Il suffit de mettre : signal(SIGINT, stop_capturing);
    4
  2. Toufou13190 Messages postés 11061 Date d'inscription   Statut Membre Dernière intervention   813
     
    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
  3. dasdqwjd
     
    Ok merci,
    n'y a t'il pas des solutions utisant des signaux ?
    0
    1. Toufou13190 Messages postés 11061 Date d'inscription   Statut Membre Dernière intervention   813
       
      Désolé trop compliqué pour mes faibles compétences.
      0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
    1. 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
      1. 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
      2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660 > 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