標準IO庫的緩衝機制引起的問題

2021-06-21 11:31:45 字數 754 閱讀 6602

在介紹有緩衝機制i/o和無緩衝機制i/o的區別之前。先看乙個例子預熱一下,如果知道為什麼,就說明關於兩者的區別是很明了的,如果看到結果很吃驚,就說明還有一點偏差

#include #include int main()

else if(pid==0)

i++;

else

sleep(2);

printf("ni=%dn",i);

return 0;

}

當stdout 為顯示屏的時候執行結果:

[root@localhost]# ./fork

befor fork.

i=11

i=10

[root@localhost]#

當stdout為檔案的時候執行結果:

[root@localhost]# ./fork > ./temp.txt

[root@localhost]# cat ./temp.txt

befor fork.

i=11

befor fork.

i=10

差別就在於這裡有兩個befor fork. 語句。因為子程序繼承了父程序的緩衝區,fork時父程序的緩衝區還沒有被清空,

所以第一條輸出語句就被複製到了子程序的緩衝區之中跟隨下面的輸出在return 的時候一起輸出到檔案。當stdout是

顯示器的時候標準i/o庫函式採取的是行快取,所以沒有出現兩條before fork. 輸出。

標準I O庫的緩衝機制

標準i o庫提供緩衝的目的是盡可能減少使用read和write呼叫的次數。它也對每個i o流自動地進行緩衝管理,從而避免了應用程式需要考慮這一點所帶來的麻煩。標準i o提供了三種型別的緩衝 1 全緩衝。這種情況下,在填滿標準i o緩衝區後才進行實際的i o操作。對於駐留在磁碟上的檔案通常是由標準i ...

標準io庫的緩衝問題

標準io函式庫執行以下三類緩衝 1 完全緩衝 在緩衝區滿,程序顯示呼叫fflush,或程序呼叫exit終止自身 c庫的exit函式呼叫標準i o清理函式 標準i o緩衝區的大小通常為8192位元組。2 行緩衝 意味著只在出現下列情況下才發生i o 碰到乙個換行符,程序呼叫fflush,或程序呼叫ex...

標準I O緩衝機制

標準i o庫提供緩衝的目的是盡可能減少使用read和write呼叫的次數。它對每個io流自動的進行緩衝管理,從而避免了應用程式需要考慮這一點所帶來的麻煩。不幸的是,標準io庫最令人迷惑的也是他的緩衝。標準io提供了3種緩衝機制 1 全緩衝。這種情況下,在填滿標準io緩衝區後才進行實際io操作。對於駐...