Aller au contenu

[Linux] Problèmes de pipes()


Yokooo

Messages recommandés

Posté(e)

bonjour,

je viens de créer un programme en c concernant les pipes sous linux.

A partir d'une mère je crée 2 filles. la 1ère fille lis le mot écris par la mère et ensuite celle-ci écris à son tour pour que la 2ème fille puisse lire.

voila le programme :

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>

int main (void)
{
   pid_t fille1,fille2;
   char messagea[] = "Reception fille 1";
   char messageb[] = "Reception fille 2";
   char message1[sizeof(messagea)];
   char message2[sizeof(messageb)];
   int i,j;
   int pd1[2];
   int pd2[2];
   int word1, word2, word3,word4;

   i = pipe(pd1);
   j = pipe(pd2);


   fille1 = fork ();
   fille2 = fork ();

// Envoi de la mère à la fille 1

   if (fille1 > 0 && fille2 > 0)
       {
           if (i == 0)
               {
                   int word1 = write(pd1[1],messagea,sizeof(messagea));
               }
               else
               {
                   printf("Non Recpetion fille 1\n");
               }
       }
   else
       {

// Reception fille 1 et écriture à la fille 2
           if (fille1 == 0)
               {
                   word2 = read(pd1[0],message1,sizeof(message1));
                   printf("%s \n",message1);
                   if (j == 0)
                       {
                           int word3 = write(pd2[1],messageb,sizeof(messageb));
                       }
                   else
                       {
                           printf("Non Recpetion fille 2\n");
                       }
           }
           else

// Reception fille 2

           if (fille2 == 0)
               {
                   word4 = read(pd2[0],message2,sizeof(message2));
                   printf("%s \n",message2);
               }
           else
               {
                   return(0);
               }
       }
}

Maintenant ce que j'aimerais, se serait que dès que la mère écris dans le mot seulement la fille 1 puisse lire (donc en endormant la fille 2) et que dès que la fille 1 l'a lu 5 fois, la fille 2 se réveille et le lis.

Pourriez vous me dire ce qu'il faut rajouter s'il vous plait ?

Il ne doit pas y avoir beaucoup de modifications mais je n'y arrive pas.

Merci beaucoup.

Geoffrey

Posté(e)

fork() wait() exit()

(oui, je sais, c'est moche pour ce que c'est, mais, il pourra adapter sur des commandes)

et au fait... comment tu fais des pipes sans dup/dup2 ?

un ptit tour sur le man :roll:

bonne chance

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...