2012-06-20 47 views
0

我正在閱讀關於流,並發現我們可以通過使用setvbuf()函數控制流...它被寫入行緩衝模式流時發送數據到文件當一個換行符是遇到和無緩衝,沒有緩衝,所以,我寫了下面的代碼...無緩衝的行爲行爲像行緩衝

#include<stdio.h> 


int main() 
{ 

setvbuf(stdin, NULL, _IONBF, 40); 
setvbuf(stdout, NULL, _IONBF, 40); 
while(1) 
{ 
char a[40]; 
int n; 
n=fread(a, 1, 4, stdin); 

if(n>0) 
fwrite(a, 1, n, stdout); 
} 
return 0; 
} 

,所以我認爲,因爲這些是無緩衝流,輸入要發送到只要我寫到標準輸出屏幕...但程序等待我在寫入每行之後按回車,然後只有輸出出現在屏幕上(作爲fwrite的結果)...我的問題是爲什麼程序等待輸入(即換行符),當這些沒有緩衝的流......

回答

1

我相信這是由於環境中的殼是如何工作的:您輸入的數據是不可用的stdin直到你按下回車鍵,所以fread阻塞,直到它可以從流

想想讀的東西如果shell將每個字符傳遞給緩衝區,你將如何處理反向空間以及類似內容

+0

@attila ...但理論上在字符類型中應該立即傳遞給文件...不是嗎? – avinash

+0

@avinash - 你在說什麼文件? 'stdin'的行爲就好像它是一個文件(用於各種函數調用),但它不是一個文件。另外,我不知道一個環境,它將立即將輸入的字符傳遞給標準輸入(談論直接用戶交互) – Attila

+0

@attila ...這裏我稱之爲由filestream表示的任何東西作爲文件...還有我不是在談論優點...我只是問是否它是這樣的 – avinash