天天看點

UNIX環境進階程式設計筆記之标準I/O庫

一、總結

  檔案I/O一章講了不帶緩沖的I/O,本章講的是帶緩沖的I/O。不帶緩沖針對的是核心的系統調用,而帶緩沖針對的是使用者空間的标準庫函數,是基于帶緩沖的I/O實作的。不帶緩沖的I/O通過檔案描述符的方式來引用一個檔案,而帶緩沖的I/O則通過檔案流(stream)的方式來引用檔案。至于為什麼要用流的方式,原因就是帶緩沖區,這樣檔案的讀寫就要經過緩沖區做緩沖,就像水流一樣。

  引入标準IO庫的目的是為了提高IO的效率,避免頻繁的進行read/write系統調用,而系統調用會消耗較多的資源。是以标準IO庫引入了IO緩存,通過累積一定量的IO資料後,然後集中寫入到實際的檔案中來減少系統調用,進而提高IO效率。标準IO庫會自動管理内部的緩存,不需要程式員介入。然而,也正是因為我們看不到标準IO庫的緩存,有時候會給我們帶來一定的迷惑性。

  緩沖區的類型分為三種:

1)全緩沖:在填滿标準I/O緩沖區後才進行實際I/O操作,對于磁盤上的檔案通常是由标準I/O庫實施全緩沖的,在一個流上執行第一次I/O操作時,相關标準I/O函數通常調用malloc等函數來獲得所需的緩沖區。

2)行緩沖:這種情況下,當在輸入輸出中遇到換行符時,标準I/O庫執行I/O操作,是以,當涉及終端裝置互動時,才使用行緩沖。

3)不帶緩沖:即标準I/O庫不對字元進行緩沖存儲,那麼這種情況就直接調用的是read、write等系統調用函數。這種情況一般用在需要對輸入輸出及時響應的情況下,如标準出錯流stderr通常是不帶緩沖的。

二、看圖說話

UNIX環境進階程式設計筆記之标準I/O庫

繼續閱讀