IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Bibliothèques, systèmes et outils C Discussion :

Échange de signaux entre un processus père et son fils


Sujet :

Bibliothèques, systèmes et outils C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 16
    Points : 16
    Points
    16
    Par défaut Échange de signaux entre un processus père et son fils
    Bonjour,
    En m'excusant en avance sur la présentation du message (Je ne suis pas un habitué des forums de discussion).
    J'essaie de créer un programme en C qui fait communiquer un processus père et son fils.
    En effet le fils doit envoyer une série de signaux au père et ce dernier doit lui envoyer un signal SIGUSR1, à son fils, pour acquitter la réception de chaque signal. Le fils doit à chaque fois attendre l'acquittement avant d'envoyer.
    Alors j'ai écrit un programme et mais je n'arrive pas à faire envoyer au père le message d’acquittement.
    En vous remerciant d'avance pour vos réponses.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
     
    void handler(int sig);
    int main(int argc, char **argv){
        pid_t pid = 0;
        int k = atoi(argv[1]);
        int nb_sig = argc-2;
        int sigs[nb_sig];
     
        struct sigaction action;
        action.sa_handler = handler;
        action.sa_flags = 0;
        sigset_t ens, avant;
        sigemptyset(&ens);
        sigaddset(&ens, 10);
        sigprocmask(SIG_BLOCK, &ens, &avant);
     
        for(int i = 0; i < nb_sig; i++){
            sigs[i] = atoi(argv[i+2]);
        }
     
        pid = fork();
     
        if(!pid){
            for(int i = 0; i < k; i++){
                for(int j = 0; j < nb_sig; j++){
                    printf("Fils----> Envoi du signal %d au pid = %d\n", sigs[j], getppid()); 
                    kill(getppid(), sigs[j]);
                    sigsuspend(&ens);
                    sigaction(SIGUSR1, &action, NULL);
                }
            }
        }
     
        else{
            struct sigaction action;
            action.sa_handler = handler;
            action.sa_flags = 0;
            sigemptyset(&action.sa_mask);
     
            for(int i = 0; i < NSIG; i++){
                if(sigaction(i, &action, NULL)!= -1){
                    kill(pid, 10);
                }
            }
            while(1);
        }
     
     
        return EXIT_SUCCESS;
    }
     
     
     
     
    /**
     * 
     */
    void handler(int sig){
        if(sig == 10){
            printf("Fils--> Reception de l'acquittement \n");
        }
        else{
            printf("Pere--->reception du signal %d\n ", sig);
        }
    }

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    C'est un exercice ou c'est un besoin réel ?
    Car construire un protocole de communication par signaux n'est pas le plus pratique ni le plus simple. Puisque c'est un père et son fils, autant utilisé un pipe : les échanges seront synchrones et il n'y aura aucune interférence avec des fonctions interrompues par ces signaux.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    En fait c'est un exercice. Aussi j'aimerai bien savoir pourquoi ça ne marche pas, parce que selon ce que j'ai compris ça doit se faire comme j'ai l'ai codé

  4. #4
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    La question que je me pose est plutôt : es-tu sûr que le processus fils reçoive bien le signal ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 16
    Points : 16
    Points
    16
    Par défaut La question que je me pose est plutôt : es-tu sûr que le processus fils reçoive bien le signal ?
    Il ne le reçoit pas effectivement...

  6. #6
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Fais des usleep entre chaque kill et surtout fais une pause avant d'envoyer ton premier signal pour être sur que le fils est bien calibré.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    C'est bon j'ai compris comment il fallait faire. En fait je ne disait pas au père d'attendre la réception d'un signal avant d'envoyer l'acquittement.
    Merci de vos réponses

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. echange de messages entre processus Delphi
    Par MrFlunch dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 01/02/2012, 22h14
  2. Réponses: 1
    Dernier message: 22/12/2011, 14h16
  3. Echange de signaux entre deux processus
    Par makastreet dans le forum Linux
    Réponses: 1
    Dernier message: 25/04/2008, 22h38
  4. Réponses: 8
    Dernier message: 09/11/2006, 14h01
  5. [Kylix] Echange de données entre fiches
    Par _dack_ dans le forum EDI
    Réponses: 1
    Dernier message: 01/07/2003, 11h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo