linux 系統程式設計 標準IO 快取

2021-10-04 23:43:30 字數 1285 閱讀 8653

1、什麼是標準io?與檔案io的區別?

檔案io:是直接呼叫核心提供的系統呼叫函式, 標頭檔案是unistd.h

標準io:是通過c庫函式間接呼叫系統呼叫函式,標頭檔案是: stdio.h

之前學過:輸入輸入相關的函式,都是和標準的輸入(鍵盤)、標註的輸出(顯示器)相關

【getchar():從鍵盤得到乙個字元,putchar():向顯示器輸出乙個字元】

getchar(),putchar() ----乙個字元

gets(buf),puts(buf) ----一串字元

scanf(),printf() ---- 乙個字元,一串字元都可以

上述這些函式與一些普通檔案(a.c)的讀寫沒有關係,也即這些函式不能讀寫普通檔案。

但標準io 不同,既能讀寫一些普通的檔案,也能向標準的輸入和輸出進行讀寫

**範例:通過檔案io直接輸出到顯示器:0:標準輸入;1:標準輸出

#include

#include

intmain()

#include

#include

intmain()

三個快取的概念(陣列):

我們的程式中的快取,就是你想從核心讀寫的快取(陣列)----使用者空間的快取

每開啟乙個檔案,核心在核心空間中也會開闢一塊快取,這個叫核心空間的快取

檔案io中的寫即是將使用者空間中的快取寫到核心空間的快取中。

檔案io中的讀即是將核心空間的快取寫到使用者空間中的快取中。

3. 標準io的庫函式中也有乙個快取,這個快取稱為----庫快取,這個快取介於使用者空間的快取和核心空間的快取之間,標準io就是通過庫快取為中間介質來進行使用者空間快取和核心空間的快取進行互動的。

例1:測試驗證庫快取的存在

標準io庫函式在什麼時候會呼叫系統呼叫函式?

標準io庫快取寫滿或滿足一定條件時,會呼叫系統呼叫函式。

#include 「stdio.h」

int main()

printf滿足一定條件 : 遇到\n 時,即會將庫快取的內容寫到核心中,即呼叫了系統呼叫函式。

#include 「stdio.h」

int main()

庫快取寫滿時,會呼叫系統呼叫函式,將lib_buffer 內容寫到kernel_buffer中去

#include 「stdio.h」

int main()

printf(「h」);

while(1);

return 0;

}

Linux系統程式設計(標準I O緩衝區)

標準i o庫提供緩衝的目的是盡可能地減少使用read和write呼叫的次數。它也對每個i o流自動地進行緩衝管理,從而避免了應用程式需要考慮這一點所帶來的麻煩。不幸的是,標準i o庫最令人迷惑的也是它的緩衝。標準i o提供了三種型別的緩衝 1 全緩衝 當在輸入和輸出中遇到換行符時,標準i o庫執行i...

Linux系統程式設計 IO部分

標準i o是ansi c建立的乙個標準i o模型,移植性好。例如在windows下或者在liunx下等平台下進行c開發都使用printf函式進行列印,所以printf就是典型的標準io。file型別 基本函式 操作函式 開啟檔案 fopen 關閉檔案 fclose 獲取乙個字元 fgetc 輸出乙個...

檔案系統程式設計 標準I O庫

printf函式向標準輸出寫入多個字元,所寫入的字元被放在乙個使用者態的緩衝區中,直到碰到乙個換行符,系統才呼叫write函式將緩衝區中的資料寫入標準輸出,也就是說,在換行符之前寫入的字元並不會立即出現在控制台螢幕上。系統呼叫要請求核心的服務,會引發cpu模式的切換,期間會有大量的堆疊資料儲存操作,...