c標準庫函式是工作在系統庫函式之上的。c標準庫函式在讀寫檔案時候都有乙個檔案流指標。
當我們呼叫c標準庫的printf函式時,printf函式實際上不知道如何顯示字元到顯示屏上,而是去呼叫應用層的writeapi函式介面,然後應用層的api函式會自動去呼叫核心sys_write函式,最後送到顯示屏上顯示。
當我們開啟乙個檔案時,實際上會返回file*結構指標,file* fp=fopen(f_path,"r");
file檔案流指標的結構體如圖所示。
file結構指標包含三個資訊,檔案描述符,檔案讀寫的位置f_pos,寫多大的buffer。
檔案描述符指向真正 的磁碟檔案,在進行檔案讀寫操作時候是先讀寫到緩衝區,然後再呼叫系統應用層api write函式進行寫操作,write將檔案內容寫到核心緩衝區,然後再呼叫核心層api sys_write進行寫操作。減少i/o,提高效率。
當我們使用c語言標準庫函式fopen()每開啟乙個檔案時候,其都會對應乙個單獨乙個緩衝區。核心緩衝區是公用的。
c標準庫函式是有緩衝區,當我們往磁碟上寫入資料時,會先寫入buffter緩衝區,然後buffer緩衝區會根據自己的重新整理方式,一次性把資料送出去
重新整理緩衝區:一般使用fflush()函式去重新整理,當緩衝區滿、程式的正常結束、以及fclose操作等都會重新整理緩衝區。換行符\n 只能重新整理終端檔案的緩衝區
下面以乙個讀寫檔案為例:
1. 將hello world字元寫入磁碟hello.txt 檔案中
2. 使用fopen開啟hello.txt 檔案,然後進行寫操作
3. 寫到c標準緩衝區
4. 滿足重新整理緩衝區條件時,會呼叫系統應用層api write函式進行寫操作
5. write將檔案內容寫到核心緩衝區
6. 如果核心緩衝區沒有滿,系統不會立即呼叫核心層api sys_write將緩衝區內容寫入到磁碟,有乙個守護程序會定時重新整理核心緩衝區。
7. 此時有乙個程序b讀hello.txt這個檔案,發現核心緩衝區就有這個檔案內容,其就不需要訪問hello.txt 磁碟檔案了。
具體流程如下:
標準庫函式和系統呼叫的區別
寫在前面 所謂標準庫函式,這裡暫時討論c語言的標準庫函式。庫函式是語言本身的一部分,而系統函式是核心提供給應用程式的介面,屬於系統的一部分。函式庫呼叫是語言或應用程式的一部分,而系統呼叫是作業系統的一部分。函式庫呼叫 系統呼叫 在所有的ansi c編譯器版本中,c庫函式是相同的 各個作業系統的系統呼...
標準庫函式和系統呼叫的區別
寫在前面 所謂標準庫函式,這裡暫時討論c語言的標準庫函式。庫函式是語言本身的一部分,而系統函式是核心提供給應用程式的介面,屬於系統的一部分。函式庫呼叫是語言或應用程式的一部分,而系統呼叫是作業系統的一部分。函式庫呼叫 系統呼叫 在所有的ansi c編譯器版本中,c庫函式是相同的 各個作業系統的系統呼...
zz標準庫函式和系統呼叫的區別
目錄 一 標準庫函式和系統呼叫的區別 二 系統呼叫 三 庫函式呼叫 四 由庫到系統呼叫的執行過程 unix環境高階程式設計 apue上的陳述 寫在前面 所謂標準庫函式,這裡暫時討論c語言的標準庫函式。庫函式是語言本身的一部分,而系統函式是核心提供給應用程式的介面,屬於系統的一部分。函式庫呼叫是語言或...