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

Linux Discussion :

Processus fils et pipeline


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 43
    Par défaut Processus fils et pipeline
    Bonjour,

    Soit plusieurs processus fils créés (à partir d'une boucle for (n=1; n <3; n++) { pid = fork() ...}), je souhaite que le processus père transmette telle ou telle information (un nombre par exemple) à telle ou telle processus fils.

    La communication entre le père et le fils utilise des descripteurs de tubes.

    Ma question quelque peu naïve est la suivante :

    Comment faire pour que le processus père envoie le nombre 1 au processus fils 1, le nombre 3 au processus fils 2, etc.

    Merci bien

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Comme c'est le père qui ouvre les pipes, il sait quel pipe correspond à quel fils... Je ne comprend pas ce qui te pose problème ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 43
    Par défaut
    Si je reprends mon code source :

    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
     
    /* création du tube */
    if (pipe(pfd1) == -1)
    {
          printf("Echec\n");
          return 1;
    }
     
    for(i = 1; i < 3; i++) 
    {
    	pid = fork();
     
    	if (pid < 0) {
    	...
    	}
     
    	if (pid == 0) 
    	{
    		/* Processus fils */
    		close(pfd1[1]); /* écriture */
     
       		/* lecture du tube */   			
       		while (read(pfd1[0], buf, 9) != 0)
            	{
           		...											
    		}
    		close(pfd1[0]); /* lecture */
    		exit(EXIT_SUCCESS);
    	}
    }
    /* Processus père */
     
    close(pfd1[0]); /* lecture */
    write(pfd1[1], temp, 9);  		
    close(pfd1[1]); /* écriture */
    ...
    Comment le père sait-il à qui il s'adresse lorsqu'il écrit dans le tube ?
    Il me semble que c'est le premier processus fils créé qui récupère les données. Les deux autres ne traitent rien.

    Après avoir bouclé pour créer mes process fils, je souhaiterais que le process père envoie telle info. au premier process fils, telle info au deuxième process, etc. mais je ne sais pas comment l'implémenter.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Il faut créer un pipe par fils (avant de forker). Dans ton code il n'y a même pas de pipe().

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 43
    Par défaut
    Désolé, un oubli dans mon copier-coller. Je viens d'éditer le post.

    Citation Envoyé par matafan Voir le message
    Il faut créer un pipe par fils (avant de forker).
    Comment spéciifer que tel tube est affecté à tel process fils ?

  6. #6
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Salut,
    Citation Envoyé par sneakz Voir le message
    Comment spéciifer que tel tube est affecté à tel process fils ?
    Avec un tableaux de tubes:
    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
     
    for(i = 1; i < 3; i++) 
    {
        /* création du tube */
        if (pipe(pfd[i]) == -1)
        {
            printf("Echec\n");
            return 1;
        }
        pid = fork();
     
        if (pid < 0) {
            ...
        }
     
        if (pid == 0) 
        {
            /* Processus fils */
            close(pfd[i][1]); /* écriture */
     
            /* lecture du tube */   			
            while (read(pfd[i][0], buf, 9) != 0)
            {
                ...											
            }
            close(pfd[i][0]); /* lecture */
            exit(EXIT_SUCCESS);
        }
    }
    /* Processus pere */
    /* ici a toi de gerer dans quel pfd[x][y] tu souhaites lire / ecrire */

Discussions similaires

  1. Tuer les processus fils
    Par soony dans le forum Linux
    Réponses: 4
    Dernier message: 12/12/2006, 13h08
  2. Executer commande dans un processus fils !
    Par jérôme.D dans le forum POSIX
    Réponses: 6
    Dernier message: 23/11/2006, 22h14
  3. Tuer processus fils
    Par lornak dans le forum POSIX
    Réponses: 7
    Dernier message: 29/05/2006, 10h00
  4. terminaison du processus fils
    Par zahira dans le forum POSIX
    Réponses: 3
    Dernier message: 08/04/2006, 13h35
  5. Partage d'une variable entre les processus fils
    Par Mehdi Feki dans le forum Linux
    Réponses: 7
    Dernier message: 09/01/2005, 13h34

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