標準io庫操作是圍繞著流來進行的,當我們通過fopen標準io庫函式開啟乙個檔案,我們就使乙個檔案和乙個io流相關聯。在這裡我們把io流和檔案指標file*等同起來,因為所有針對io流的操作都是通過file*指標來實現的。
我們知道引入標準io庫的目的是為了提高io的效率,避免頻繁的進行read/write系統呼叫,而系統呼叫會消耗較多的資源。因此標準io庫引入了io快取,通過累積一定量的io資料後,然後集中寫入到實際的檔案中來減少系統呼叫,從而提高io效率。標準io庫會自動管理內部的快取,不需要程式設計師介入。然而,也正是因為我們看不到標準io庫的快取,有時候會給我們帶來一定的迷惑性。這裡介紹下標準io庫的快取策略。
一。標準i/o的快取--標準輸出為例:(這裡都是指預設情況下)
1)當stdout連線到終端裝置時,那麼它就是行快取的,也就是標準io庫沒看到乙個新行符 /n時就重新整理一次快取(即執行一次實際的輸出操作)。這一特性可以通過如下測試**來驗證
int main()
2)當stdout被重定向到乙個具體檔案時,那麼標準輸出是全快取的,也就是說只有當輸出快取被塞滿或者呼叫fflush或fclose時才會執行實際的寫入操作,這裡就不給出具體例子,可以通過freopen將stdout重定向到乙個具體檔案來進行測試。
二。標準出錯stderr:為了盡快的看到出錯資訊,標準出錯是不帶任何快取的
標準IO快取
linux的io操作學習總結如下 一 linux對io檔案操作的方式 1.不帶快取 如open read等。這是posix標準,在使用者空間沒有快取,在核心空間還是將進行快取。以寫資料時為例,先呼叫write 函式將資料寫入記憶體緩衝區,可能會呼叫write 多次之後才會將核心空間的緩衝區寫滿,寫滿...
Linux標準庫IO介面
標準庫的io介面 include file fopen const char path,const char mode 返回值 成功將返回乙個指向檔案物件file的指標.否則,將返回 null fopen開啟檔名為path指向的字串的檔案,將乙個流與它關聯 引數mode指向乙個字串,以下列序列之一開...
linux 系統程式設計 標準IO 快取
1 什麼是標準io?與檔案io的區別?檔案io 是直接呼叫核心提供的系統呼叫函式,標頭檔案是unistd.h 標準io 是通過c庫函式間接呼叫系統呼叫函式,標頭檔案是 stdio.h 之前學過 輸入輸入相關的函式,都是和標準的輸入 鍵盤 標註的輸出 顯示器 相關 getchar 從鍵盤得到乙個字元,...