2013-10-22 90 views
0

根據man popen,「輸出popen()流默認被完全緩衝」。但是對於下面的代碼,我仍然可以獲取我的ls -l命令的所有信息,而不使用fflush(p)命令。這是否使感覺?我想我需要fflush(p)來刷新存儲在用戶緩衝區中的命令輸出到std out。「輸出popen()流默認完全被緩衝」是什麼意思?

#include <stdio.h> 

int main() 
{ 
    FILE *p=popen("ls -l","r"); 
    char buf[100]; 
    memset(buf,0x00,100); 
    //fflush(p); 

    fread(buf,sizeof(char),90,p); 

    printf("%s",buf); 
    pclose(p); 

    return 0; 
} 

回答

3

這是一個輸入popen()流,而不是輸出流。

fflush()函數只對輸出流或更新流進行操作,而不對輸入流進行操作。

+0

這應該是一個評論而不是答案。 –

+1

@R:我不確定如何將此擴展爲答案。提問者很困惑,因爲'fflush()'對於一個明顯緩衝的流是不必要的。這就像一個缺少的分號 - 它不會引發詳細的答案,因爲沒有細節可以添加。 –

+0

@DietrichEpp你是對的,它應該是輸入(對父進程) – henryyao