看看這個代碼:哪些錯誤與此打印順序
#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