Я сделал этот код:
#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;
}
Этот код должен создать канал между родительским и дочерним процессами. Процесс-отец должен прочитать файл и отправить каждую строку дочернему процессу. Дочерний процесс печатает полученные строки.
Но в этом коде есть ошибка. Если я запускаю так, я получаю только несколько строк текста в файле. Если я запускаю с помощью комментария sleep(1), я получаю все строки текста.
Кто-нибудь может увидеть ошибку?