Bonjour,
J'essaye de comprendre en ce momen, le principe des pipe, seulement, avec ce code, j'ai un probleme, il ne me fait pas ce qu'il devrait, c'est à dire:
-Le pere envoi au fils "Salut filston"
-Le fils lis ces données et les affiche à l'écran
-Le fils envoi au pere "Reçu 5 sur 5"
-Le pere affiche ce message
Donc, voici mon code:
#include <stdio.h>
#include <memory.h>
#include <unistd.h>
int main(int argc, char **argv)
{
/* Création du pipe */
int pfd[2];
if(pipe(pfd) == -1)
{
printf("pipe failed\n");
return 1;
}
/* Création du processus fils */
int pid;
if( (pid = fork()) < 0 )
{
printf("fork failed\n");
return 2;
}
if (pid == 0)
{
/* processus enfant */
char buffer[BUFSIZ];
close(pfd[1]); /* Fermeture du coté ecriture */
/* Lecture des données envoyées par le pere */
while(read(pfd[0], buffer, BUFSIZ) != 0)
printf("child reads %s", buffer);
close(pfd[1]); /* Fermeture du côté lecture */
/* Envoi de l'accusé de reception */
strcpy(buffer, "OK, reçu 5 sur 5\n");
write(pfd[1], buffer, strlen(buffer) + 1);
/* Fermeture du pipe */
close(pfd[1]);
}
else
{
/* Processus pere */
char buffer[BUFSIZ];
close(pfd[0]); /* Fermeture du coté lecture */
/* Envoi de données vers le processus Fils */
strcpy(buffer, "Salut Filston!\n");
write(pfd[1], buffer, strlen(buffer) + 1);
/* Fermeture du coté ecriture */
close(pfd[1]);
/* Reception de l'acusé */
while(read(pfd[0], buffer, BUFSIZ) != 0)
printf("father reads %s", buffer);
/* Fermeture du coté lecture */
close(pfd[0]);
}
return 0;
}
Seulement, il m'affiche sans arrêt "salut filston"
Je pense que le probleme vient du fait que dans le processus enfant, le coté ecriture est fermé, puis que j'essai d'écrire dedans
Si vous pouvez m'expliquer, là où ça bloque, parce-que là je suis un peu perdu
Merci
- Il y a un chemin vers chaque sommet, même le plus haut -
Il te faut 2 pipes, 1 pere -> fils et l'autre fils-> pere.
Les pipes UNIX sont unidirectionels.
Donc tu fait 2 appels à pipe(), dans le fils tu fermes le côté écriture du pipe pere->fils, et le côté lecture du pipe fils->pere.
Et tu fait l'inverse dans le process père.
Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention. Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé. Pour plus d'informations, nous vous invitons à lire les règles générales du forum
Avant de poster, demandez-vous si ce que vous allez dire apporte quelque chose au sujet. Si votre message n'apporte rien, vous ferez perdre du temps à tout le monde et le sujet pourrait dévier ou devenir difficile à suivre.
Aussi, vérifiez la date du topic. Le déterrage de topic nuit au bon fonctionnement du forum et est interdit. Utilisez les boutons pour dire merci. Si le topic date de plus de deux mois sans réponses, mieux vaut ne pas répondre. Si vous avez une question similaire, créez plutôt votre propre sujet en détaillant votre contexte