目錄
一、緩沖區的初步認識
二、向文件中寫數據的具體過程
三、緩沖區刷新的時機
一、緩沖區的初步認識
????????緩沖區其實就是一塊內存區域,采用空間來換時間,可以提高使用者的效率。我們一直說的緩沖區其實是語言層面上的緩沖區,其實操作系統內部也有自己的緩沖區,但是我們一般不談,因為操作系統在設計的時候就默認屏蔽了底層的一切細節,所有我們所談的緩沖區就是語言層面上的緩沖區,也就是說C語言、C++等語言在設計的時候都設計了緩沖區(可以支持輸入輸出的格式化操作)。
????????上面這張圖我們在之前的博客中也有所提及,我們可以看到,語言層面的緩沖區其實封裝在struct file結構體內部的,也就是說,一個文件一個緩沖區。
二、向文件中寫數據的具體過程
????????以C語言來舉例,用戶在調用fwrite、fputs這些函數的時候,并不是直接將數據寫入到了操作系統內部(因為系統調用時有成本的),而是先將數據寫入到了語言層面的緩沖區中,在數據積累到一定程度或者到了合適的時候,再由系統調用接口將數據拷貝到操作系統內部自己的緩沖區中,最后由操作系統幫我們把數據寫入到磁盤當中。這就好比收發快遞的過程,你把快遞送到快遞站,快遞站并不會馬上幫你發貨,而是會等到快遞積累到一定程度以后再統一發貨,快遞到達另外一個快遞站后也不會直接送給用戶,同樣會等到快遞積累到一定程度再由快遞員統一配送。這就是向文件中寫數據的具體過程。在用戶層面,在調用fwrite、fputs這些函數的時候你只需要將數據寫入緩沖區里就可以直接返回了,這大大提高了這些C語言函數的使用效率。這種設計理念與思想可能就是C語言效率高的由來。
三、緩沖區刷新的時機
如果用戶強制刷新,緩沖區的內容就會直接寫入操作系統;
進程退出的時候,緩沖區也會刷新;
如果是按行刷新,遇到‘\n’緩沖區就會刷新(顯示器文件);
緩沖區寫滿時就會自動刷新(普通文件)。