我正在尝试使用管道通信来编写程序。这就是我想要做的:用户发送正整数。如果用户发送负号,则通信结束。父进程打印最大数量和最小数量。这是我试过的:Pipe()不能正常工作 - linux
#include <unistd.h>
#include <stdio.h>
main(){
int pfd[2];
int buff[200];
pipe(pfd);
if(fork()==0){
close(pfd[0]);
int n;
printf("Give a number: ");
scanf("%d",&n);
while(n >=0){
write(pfd[1],&n,1);
printf("Give a number: ");
scanf("%d",&n);
}
exit(0);
}
else{
close(pfd[1]);
read(pfd[0],buff,sizeof(buff));
printf("The parent read %d:",*buff);
wait(0);
}
}
这个printf("The parent read %d:",*buff);
只打印我给的第一个数字。有人能更好地向我解释我必须做什么吗?如何打印所有缓冲区?我只在缓冲区中写入1个数字,就是这样吗?我如何找到最大和最小数字?我很困扰! :(
你需要调用'fflush(NULL)'...,你可以使用'fdopen'(或者'popen') – 2013-05-10 13:02:10
@BasileStarynkevitch在哪里? fflush做了什么? – MathMe 2013-05-10 13:03:27
为了正确性/可移植性,该写入调用应为'write(pfd [1],&n,sizeof(n))'。但是,它不会改变您看到的行为。 – pilcrow 2013-05-10 13:17:10