J'ai un tuyau, un parent et un processus fils. Le parent lit à partir d'un fichier certaines données, le met dans le tube, et après, l'enfant devrait lire toutes les données. Mon problème est le suivant: mon parent lit les données, l'enfant reçoit les données du tuyau, mais quand il atteint sa fin, le processus se termine, et pas de sortie après avoir quitté l'instruction while, comme il se doit.Sorties de processus lors de la lecture d'un tuyau
int main(void)
{
int inputFile, channel[2], PID;
if(-1 == pipe(channel))
{
perror("Eroare");
return 0;
}
if(-1 == (inputFile = open("data.txt", O_RDONLY)))
{
perror("Error");
return 0;
}
if(-1 == (PID = fork()))
{
perror("Error");
return 0;
}
if(PID != 0)
{
char buffer;
if(-1 == close(channel[0]))
perror("Error");
while(1 == read(inputFile, &buffer, 1))
write(channel[1], &buffer, 1);
if(-1 == close(channel[1]))
perror("Error");
}
else
{
char buffer;
while(1 == read(channel[0], &buffer, 1))
printf("%c\n", buffer);
if(-1 == close(channel[0]))
perror("Error");
if(-1 == close(channel[1]))
perror("Error");
printf("Should output this");
}
return 0;
}
Mon fichier de données contient la chaîne: ABC
et la sortie est:
A
B
C
+ 2 lignes vides supplémentaires
Mais que se passe-t-il si je veux écrire quelque chose dans l'enfant à la pipe, et après faire parent 'wait (NULL) 'pour l'enfant, de sorte que le parent lise de la pipe ce que l'enfant a écrit? – Peter
Si vous voulez que l'enfant garde le côté écriture du tuyau ouvert, vous ne pouvez pas simplement lire depuis le tuyau jusqu'à ce que le tuyau soit fermé. Vous aurez besoin d'un autre mécanisme pour que le parent informe l'enfant qu'il a écrit toutes les données. –