Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

POSIX C Discussion :

Sauvegarde à la réception d'un CTRL-C


Sujet :

POSIX C

  1. #1
    Membre du Club
    Sauvegarde à la réception d'un CTRL-C
    Bonsoir. J'écris un petit programme multithreadé. J'aimerai qu'à la réception d'un signal CTRL-C le programme puisse sauvegarder l'état de la mémoire avant de s'arrêter. J'arrive à capturer le signal mais je sais pas comment passer les variables au traitant (elles ne sont pas globales).
    Je voudrai savoir si il existe un moyen de passer les variables non globales au traitant. Si oui, comment? Si non, pourquoi?
    Merci!!

  2. #2
    Responsable Systèmes

    Tu peux utiliser les signaux POSIX (signal.h)

    Si tu es sous Windows, je ne sais pas comment c'est géré, ça doit exister mais il doit y avoir des fonctions spécifiques dans lesx API.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutor...s/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre du Club
    Je suis sur Ubuntu 19.04.

    J'utilise sigaction de POXIS pour la capture. mais le handler prend un int en paramètre qui correspond au signal.

  4. #4
    Membre du Club
    C'est un peu farfelue ce que tu essaies de faire. Si après le Ctrl+C, il y a des données en cours de traitements?
    Pourquoi ne pas utiliser des pointeurs globales?
    Et montre le code complet ça m’intéresse.

  5. #5
    Responsable Systèmes

    Je suis sur Ubuntu 19.04.
    Tu peux alors tu simplement gérer un handler pour sigint.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <signal.h>
     
    void sigintHandler(int sig_num) 
     { 
       printf("SIGINT intercepté\n");
    }
     
     
    int main()
    {
        signal(SIGINT, sigintHandler); 
        // ton code
    }
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutor...s/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation