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

 C Discussion :

explication d'un code


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 31
    Points : 27
    Points
    27
    Par défaut explication d'un code
    Bonjour,
    je suis entrain d'étudier le C et la communication inter-processus par C et je suis tombé sur un code dont je ne comprend pas l'algorithme. Quelqu'un pourrait-t-il m'expliquer ?
    Code C : 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
    // C program to illustrate 
    // pipe system call in C 
    // shared by Parent and Child 
    #include <stdio.h> 
    #include <stdlib.h>
    #include <unistd.h> 
    #include <sys/types.h>
    #include <sys/wait.h>
    #define MSGSIZE 16 
    char* msg1 = "hello, world #1"; 
    char* msg2 = "hello, world #2"; 
    char* msg3 = "hello, world #3"; 
     
    int main() 
    { 
        char inbuf[MSGSIZE]; 
        int p[2], pid, nbytes; 
     
        if (pipe(p) < 0) 
            exit(1); 
     
        /* continued */
        if ((pid = fork()) > 0) { 
            write(p[1], msg1, MSGSIZE); 
            write(p[1], msg2, MSGSIZE); 
            write(p[1], msg3, MSGSIZE); 
            //printf("% s",p[1]);
     
            // Adding this line will 
            // not hang the program 
            // close(p[1]); 
            wait(NULL); 
        } 
     
        else { 
            // Adding this line will 
            // not hang the program 
            // close(p[1]); 
            while ((nbytes = read(p[0], inbuf, MSGSIZE)) > 0) 
                printf("% s\n", inbuf); 
            if (nbytes != 0) 
                exit(2); 
            printf("Finished reading\n"); 
        } 
        return 0; 
    }
    je vous laisse le lien aussi : https://github.com/Liadc/operating-s...pipesExample.c

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par cedrickab Voir le message
    et je suis tombé sur un code dont je ne comprend pas l'algorithme. Quelqu'un pourrait-t-il m'expliquer ?
    Est-ce que tu sais ce que font fork() et pipe() ??? Parce que c'est le coeur de l'exemple. Et si tu ne sais pas, alors comme c'est aussi le coeur de la communication inter-processus il te faut aller l'apprendre ce qui te permettra de comprendre cet exemple.
    pipe() génère un tube de communication et stocke ce tube dans le tableau de 2 int qu'il a reçu en paramètre (partie lecture sur l'indice [0] et partie écriture sur indice [1]).
    fork() génère un processus fils, qui hérite de tous les descripteurs ouverts donc aussi du tube. Grâce à la valeur de retour de la fonction (qui n'est pas le même entre le père et son fils) on peut programmer un code spécifique au père et un autre spécifique au fils.
    Ici le père écrit les 3 messages dans la partie écriture du tube puis le fils va lire ces messages dans la partie lecture pour les afficher.
    Accessoirement en début du if (le père) il faut rajouter close(p[0]) car ce côté a été ouvert pour rien et décommenter le close(p[1]) (car il est d'usage de fermer les descripteurs ouverts) et en début de else il faut décommenter le close(p[1]) inutilisé et rajouter un close(p[0]) à la fin (pour les mêmes raisons). Et <sys/types.h> est inutile.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 453
    Points : 43 106
    Points
    43 106
    Par défaut
    Et attention, les fonctions pipe et fork, c'est sous Linux. Sous Windows il faudra utiliser d'autres fonctions qui feront globalement la même chose mais avec des nuances de fonctionnement.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 31
    Points : 27
    Points
    27
    Par défaut
    c'est compris merci

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

Discussions similaires

  1. Explication sur du code javascript
    Par griese dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/07/2006, 09h40
  2. explications/commentaires de codes
    Par pascal913 dans le forum Access
    Réponses: 24
    Dernier message: 19/07/2006, 14h01
  3. cherche explication sur du code
    Par abdoulzak dans le forum Langage
    Réponses: 1
    Dernier message: 06/07/2006, 10h23
  4. besoin d'explications sur un code
    Par NAHIAG dans le forum C
    Réponses: 8
    Dernier message: 28/05/2006, 12h37
  5. [javascript] explication d'un code
    Par mzt.insat dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/04/2006, 23h52

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