Yokooo Posted March 14, 2007 Share Posted March 14, 2007 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 Link to comment Share on other sites More sharing options...
16ar Posted March 19, 2007 Share Posted March 19, 2007 Je ne m'y connais pas, donc je ne donnerais aucun conseil a part : Utilise les balises CODE pour ton code Link to comment Share on other sites More sharing options...
Gnaphron Posted March 19, 2007 Share Posted March 19, 2007 Je dirais : utilises des semaphores pour savoir qui doit répondre. Je te laisse un peu chercher sur comment ça marche. Link to comment Share on other sites More sharing options...
lorinc Posted March 21, 2007 Share Posted March 21, 2007 tu peux aussi faire une synchro par signaux Link to comment Share on other sites More sharing options...
Mephisto Posted March 29, 2007 Share Posted March 29, 2007 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 bonne chance Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.