read/write/fsync:
linux底層操作;
核心呼叫, 涉及到程序上下文的切換,即使用者態到核心態的轉換,這是個比較消耗效能的操作。
fread/fwrite/fflush:
c語言標準規定的io流操作,建立在read/write/fsync之上
在使用者層, 又增加了一層緩衝機制,用於減少核心呼叫次數,但是增加了一次記憶體拷貝。
兩者之間的關係,見下圖:
補充:對於輸入裝置,呼叫fsync/fflush將清空相應的緩衝區,其內資料將被丟棄;
對於輸出裝置或磁碟檔案,fflush只能保證資料到達核心緩衝區,並不能保證資料到達物理裝置, 因此應該在呼叫fflush後,呼叫fsync(fileno(stream)),確保資料存入磁碟。
fflush函式和fsync函式對比如下:
1.fflush接受乙個引數file *.
fflush(file *);
fflush是libc.a中提供的方法,是用來將流中未寫的資料傳送到核心。如果引數為null,將導致所有流沖洗。
fsync接受的時乙個int型的檔案描述符。
fsync(int fd);
fsync是系統提供的系統呼叫。將資料寫到磁碟上
2.fflush/fsync 功能區別
fflush:是把c庫中的緩衝呼叫write函式寫到磁碟[其實是寫到核心的緩衝區]。
fsync:是把核心緩衝刷到磁碟上。
c庫緩衝-----fflush---------〉核心緩衝--------fsync-----〉磁碟
進一步引申到sync()、fflush()、fsync()這3個函式的別
a、三者的用途不一樣:
sync,是同步整個系統的磁碟資料的.
fsync是同步開啟的乙個檔案到緩衝區資料到磁碟上.
fflush是重新整理開啟的流的.
b、同樣是同步,但三者的同步等級不一樣:.
sync, 將緩衝區資料寫回磁碟, 保持同步.(無引數)
fsync, 將緩衝區的資料寫到檔案中.(有乙個引數 int fd)
fflush, 將檔案流裡未寫出的資料立刻寫出
fflush和fsync的聯絡和區別
傳統的u n i x實現在核心中設有緩衝儲存器,大多數磁碟i o都通過快取進行。當將資料寫 到檔案上時,通常該資料先由核心複製到快取中,如果該快取尚未寫滿,則並不將其排入輸出 佇列,而是等待其寫滿或者當核心需要重用該快取以便存放其他磁碟塊資料時,再將該快取排 入輸出佇列,然後待其到達隊首時,才進行實...
清空輸入緩衝 與 fflush
1.為什麼 fflush stdin 是錯的首先請看以下程式 include stdio.h int main void return 0 這個程式首先會提示使用者輸入乙個整數,然後等待使用者輸入,如果使用者輸入的是整數,程式會輸出剛才輸入的整數,並且再次提示使用者輸入乙個整數,然後等待使用者輸入。...
關於fflush函式的使用
fflush stdin fflush stdout 用來強制重新整理緩衝區資料。如果需要在每次i o操作前後,不希望緩衝中存在歷史資料或者不期望的資料或者為了清除快取等的時候使用,通常是為了確保不影響後面的資料讀取 例如在讀完乙個字串後緊接著又要讀取乙個字元,此時應該先執行fflush stdin...