ich diesen Code getan habe:Fehler von syncronism in Daten aus einer Datei sendet ein Rohr mit
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#define BUFFER_SIZE 255
#define PATH "./test.txt"
int main(int argc, char **argv)
{
char read_msg[BUFFER_SIZE];
FILE *fp;
char buffer[BUFFER_SIZE];
fp = fopen(PATH, "r");
int fd[2];
pid_t pid;
if(pipe(fd) == -1){
perror("Pipe failed");
return 1;
}
pid=fork();
if (pid==-1)
{
perror("Fork failed");
return 1;
}
if (pid>0)
{
close(fd[0]);
fgets(buffer, BUFFER_SIZE, (FILE*)fp);
do{
write(fd[1],buffer,strlen(buffer)+1);
//sleep(1);
}while(fgets(buffer, BUFFER_SIZE, (FILE*)fp) != NULL);
close(fd[1]);
wait(NULL);
}else{
close(fd[1]);
while(read(fd[0], read_msg, BUFFER_SIZE) != 0){
printf("Child had read: %s", read_msg);
}
close(fd[0]);
}
return 0;
}
Dieser Code muss ein Rohr zwischen dem Vater Prozess und dem Kind-Prozess erstellen. Der Vaterprozess muss die Datei lesen und jede Zeile an den untergeordneten Prozess senden. Der Kindprozess druckt die empfangenen Zeilen.
Aber dieser Code hat einen Fehler. Wenn ich so laufe, bekomme ich nur einige Zeilen des Textes in der Datei. Wenn ich mit dem kommentierten sleep (1) laufe bekomme ich alle Zeilen des Textes.
Kann jemand den Fehler sehen?