檔案I O之C標準庫函式和系統庫函式差別

2021-09-07 10:57:15 字數 1014 閱讀 2054

1.首先c標準庫函式是工作在系統庫函式之上的。c標準庫函式在讀寫檔案時候都有乙個檔案流指標。file*fp=null;// fp=fopen(f_path,"r");

fp檔案流指標,其指向結構體例如以下圖所看到的。

檔案描寫敘述符指向磁碟檔案。在進行檔案讀寫操作時候是先讀寫到緩衝區。然後再呼叫系統應用層api write函式進行寫操作,write將檔案內容寫到核心緩衝區,然後再呼叫核心層api sys_write進行寫操作。

到這樣能夠降低i/o操作,提高讀寫操作。

值得說明的是:使用c語言標準庫函式fopen()每開啟乙個檔案時候,其都會相應乙個單獨乙個緩衝區。

核心緩衝區是公用的。

重新整理c標準緩衝區:緩衝區滿、程式的正常結束、以及fclose操作,等都會重新整理緩衝區。

一般能夠使用fflush()函式去重新整理,值得說明的是:換行符\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 磁碟檔案了。

詳細流程例如以下:

系統I O函式與C標準庫函式

先上圖 read write函式常常被稱為 unbuffered i o。指的是無使用者輸入級緩衝區,但不保證不使用核心緩衝區。使用者程式在讀寫檔案時既可以呼叫c標準i o庫函式,也可以直接呼叫底層的系統i o函式,有什麼區別呢?c標準庫的i o緩衝區有三種型別 全緩衝 行緩衝和無緩衝。如果緩衝區寫...

C標準庫I O和Linux檔案I O

c標準 i o庫函式在標頭檔案 stdio.h 中宣告,而 read write 等函式 檔案i o 在標頭檔案 unistd.h 中宣告 linux的訪問許可權分為 讀 寫 執行三種,可以使用ls l進行檢視 niesh niesh desktop ls lh 總用量 8.0k rw rw r 1...

系統函式I O操作與標準庫函式流操作

對於應用程式設計的i o操作 對於應用程式設計的io操作有兩種函式操作方式,一為直接呼叫系統核心的api操作列open,其次為呼叫c標準的庫函式操作列fopen。系統呼叫方式函式的返回值為控制代碼,而c庫返回的是檔案結構體指標。以下為系統呼叫方式對於open,lseek,write,read,的簡單...