Avant d'expliquer mon problème voici ce que j'essaie de faire tout simplement:
J'ai deux programme, dans le premier je lance le deuxième programme (en utilisant un fork() + execv()), puis j'essaie de les faire communiquer en utilisant les pipes.
Mon problème: J'arrive à lire le message qui vient du parent vers le fils, mais je n'arrive pas à lire le message envoyé depuis le fils.
Code parent.c :
#include <stdio.h>
#include <memory.h>
#include <unistd.h>
int main()
{
//int status;
int pfd[2] /*Du père vers le fils*/ ,pfd2[2]/*Du fils vers le père*/;
if (pipe(pfd) == -1)
{
printf("pipe failed\n");
return 1;
}
if (pipe(pfd2) == -1)
{
printf("pipe failed\n");
return 1;
}
int pid;
if ((pid = fork()) < 0)
{
printf("fork failed\n");
return 2;
}
if (pid == 0)
{
/* child */
//dup2(pfd2[1],STDOUT_FILENO);
close(pfd[1]);
close(pfd2[0]);
char* arr[] = {"Dest", pfd, pfd2, NULL};
execv("/home/Moi/enfant.c", arr);
}
else
{
/* parent */
char sendMessage[BUFSIZ];
char readmessage[20];
close(pfd[0]);
close(pfd2[1]);
strcpy(sendMessage, "Salut Fiston\n");
printf("In Parent: Message to send- %s\n", sendMessage);
write(pfd[1], sendMessage, strlen(sendMessage)+1);
wait(NULL);
read(pfd2[0], readmessage, sizeof(readmessage))!=0;
printf("In Parent: Reading from pipe 2 – Message is %s\n", readmessage) !=0;
close(pfd[1]);
close(pfd2[0]);
}
//printf("Finish\n");
return 0;
}
J'ai déjà essayé d'utiliser la fonction dup2, mais celui la me permet de récupérer ce qui devrait être affiché en stdout. Mais je souhaite aussi afficher dans la console à partir de mon enfant.c. Je voulais savoir quel est le problème et s'il y aurait une solution.
Salut, merci de ta réponse. J'avais déjà vu ce site (très bien expliqué au passage !). J'ai vérifié mon code, les pipes en questions sont bien fermé. Merci encore
Execv()+fork()+pipe()
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.