看看这个代码:哪些错误与此打印顺序
#include<stdio.h>
#include <unistd.h>
int main()
{
int pipefd[2],n;
char buf[100];
if(pipe(pipefd)<0)
printf("Pipe error");
printf("\nRead fd:%d write fd:%d\n",pipefd[0],pipefd[1]);
if(write(pipefd[1],"Hello Dude!\n",12)!=12)
printf("Write error");
if((n=read(pipefd[0],buf,sizeof(buf)))<=0)
printf("Read error");
write(1,buf,n);
return 0;
}
我期待中的printf要打印阅读fd和之前从管道中读取你好哥们写的FD。但事实并非如此......见here。当我在我们学校的计算机实验室尝试同样的程序我的产量
Read fd:3 write fd:4
Hello Dude!
也是我们几个朋友指出,改变printf语句包含更多的\n
字符数变化的输出顺序...例如。 printf("\nRead fd:%d\n write fd:%d\n",pipefd[0],pipefd[1]);
表示读取fd被打印,然后消息Hello Dude!
然后写入fd被打印。这是什么行为? 注意:出实验室使用我们运行终端的Linux服务器,但我不记得编译器版本。
嗨glglgl,我被管道分散注意力,忽略那一个:) – ypnos
我的写作'write(1,buf,n)'的意图是打印到控制台 – sasidhar
thx澄清 - 我现在可以删除我的评论:-) – glglgl