前段我把鍵盤丟了,今天我重新買了乙個鍵盤,新鍵盤拿到手後,舊鍵盤又被我找到了!我真是……現在呢,我兩個鍵盤它也沒多大用,於是我決定把新鍵盤送給我在北京的好盆友foreb。我現在有兩個送鍵盤的方案:
1.我親自護送鍵盤,打車,買機票到北京,然後跑到他家,他在家的話,直接給他,不在家我再等等他,等他回來了給他。給他後我就回學校
2.我走到操場那的韻達快遞,鍵盤往工作人員那一遞,得意洋洋地說:我要寄快遞!工作人員遞給我單子,我美滋滋地填好資訊,然後轉身回宿舍。
兩個方式都可將鍵盤送到foreb手裡(只送鍵盤,不存在其他活動),大家會選擇哪種?一定是第二種吧?
為什麼?節省時間和金錢,也就是可以提高你的效率。有自己跑過去送的時間,你都不知道複習了幾遍隨機過程,有買機票的錢,你估計都能直接給foreb買8個鍵盤了。對不對?
ansic標準採用「緩衝檔案系統」處理的資料檔案,所謂「緩衝檔案系統「是指系統自動地在記憶體中為程式的每乙個正在使用的檔案開闢一塊檔案緩衝區。從記憶體向磁碟輸出資料會先送到記憶體中的緩衝區,裝滿緩衝區後才一起送到磁碟上。如果從磁碟檔案中讀取資料輸入到記憶體緩衝區(充滿緩衝區),然後再從緩衝區域逐個地將資料送到程式資料區(程式變數等)。
上述過程如下圖所示,這也就意味著在程式在與磁碟進行資料互動時,資料並不是直接被傳給程式或者磁碟的,而是存在乙個中間媒介,這個媒介會把資料先拿到自己手裡,時機合適才會將資料交給資料目的地。
那現在,記憶體與磁碟進行資料互動的過程就好像我給foreb送鍵盤的過程。記憶體就是我,磁碟就是foreb,韻達快遞就是緩衝區,送鍵盤就是io過程,緩衝區有重新整理條件,韻達快遞也不是你剛付完款,立馬給你的鍵盤安排專機送過去,它也要等快遞數目到一定數量後,才會一起送出去。
最後簡單粗暴理解一下緩衝區就是:
緩衝區本質是記憶體裡的一段空間(c幫助我們維護)
如果沒有緩衝區,假設乙份**裡有成百上千的io操作,那麼這份**的執行週期肯定特別長!效率特別低!(原因在於記憶體與磁碟資料訪問速度存在巨大差距)有了緩衝區,事情就變得簡單了,資料先往緩衝區裡放,然後達到一定條件(重新整理條件)再統一送出去,效率槓槓的。同樣是一次io,有緩衝區存在我一次可以在磁碟上訪問很多資料,沒有緩衝區,我從每個資料都要都要進行一次io。
最後,就六個字總結一下,緩衝區的存在意義:
提高io效率
當然緩衝區也有缺點:
有可能導致資料丟失(概率極低),但不能否認這個可能的存在
1.無緩衝(沒有緩衝區)
2.行緩衝(掃瞄緩衝區時,遇見\n
則重新整理一次緩衝區)
3.全緩衝(緩衝區寫滿再重新整理)
【注】重新整理一次即緩衝區送出一次資料
1.全緩衝:緩衝區空間滿則重新整理
2.行緩衝:遇\n
則重新整理
3.程式退出時進行重新整理
4.強制重新整理fflush()
5.fclose()
也會強制重新整理緩衝區
linux檔案緩衝區
一 緩衝區機制 根據應用程式對檔案的訪問方式,即是否存在緩衝區,對檔案的訪問可以分為帶緩衝區的操作和非緩衝區的檔案操作 緩衝區檔案操作 高階檔案系統,將在使用者空間中自動為正在使用的檔案開闢記憶體緩衝區。非緩衝區檔案系統 低階檔案系統,如果需要,只能由使用者在自己的程式中為每個檔案設定緩衝區。如果採...
輸入緩衝區與輸出緩衝區
本博文通過一段程式來理解輸入緩衝區與輸出緩衝區。程式如下 author wanghao created time thu 17 may 2018 06 03 12 ampdt file name test.c description include int main int argc,const c...
Linux檔案緩衝區詳解
華清遠見嵌入式學院講師。a 緩衝區機制 根據應用程式對檔案的訪問方式,即是否存在緩衝區,對檔案的訪問可以分為帶緩衝區的操作和非緩衝區的檔案操作 a 帶緩衝區檔案操作 高階標準檔案i o操作,將會在使用者空間中自動為正在使用的檔案開闢記憶體緩衝區。b 非緩衝區檔案操作 低階檔案i o操作,讀寫檔案時,...