он печатает только первый, а затем останавливается.
обратите внимание, что ребенок (пытается) только для чтения один , прежде чем уйти, так что даже вы отправили несколько только первое печатается
Doing
n = read(fd, &x1, sizeof(double));
предполагает, что numbers.txt содержит двоичное представление типа double, но из-за расширения txt Я думаю, что они содержат числа в форме ASCII, а не двоичные. Обратите внимание, что l oop, в то время как n не равно нулю, не совместимо с фактом read return -1 в EOF (не 0)
, если я изменю ваш программа для чтения их из формы ascii, и я добавляю al oop в ребенка все в порядке
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/wait.h>
int main()
{
pid_t pid;
int pip[2];
FILE * fd;
double x1;
double x2;
pipe(pip);
pid = fork();
fd = fopen("numbers.txt", "r");
if(pid == 0)
{
close(pip[1]);
while (read(pip[0], &x2, sizeof(double)) == sizeof(double))
printf("%f\n", x2);
close(pip[0]);
}
else
{
close(pip[0]);
while (fscanf(fd, "%lf", &x1) == 1)
{
write(pip[1], &x1, sizeof(double));
}
close(pip[1]);
waitpid(pid, NULL, 0);
}
return 0;
}
Компиляция и выполнение:
/tmp % gcc -Wall p.c
/tmp % cat numbers.txt
1.2
3.14
/tmp % ./a.out
1.200000
3.140000
/tmp %