說明:我只對網路資源進行了整合,方便學習~。~
基於流的操作最終會呼叫read或者write函式進行i/o操作。為了使程式的執行效率最高,流物件通常會提供緩衝區,以減少呼叫系統i/o庫函式的次數。
基於流的i/o提供以下
3種緩衝:
全緩衝:直到緩衝區被填滿,才呼叫系統i/o函式。對於讀操作來說,直到讀入的內容的位元組數等於緩衝區大小或者檔案已經到達結尾,才進行實際的i/o操作,將外存檔案內容讀入緩衝區;對於寫操作來說,直到緩衝區被填滿,才進行實際的i/o操作,緩衝區內容寫到外存檔案中。磁碟檔案通常是全緩衝的。
行緩衝:直到遇到換行符'/n',才呼叫系統i/o庫函式。對於讀操作來說,遇到換行符'/n'才進行i/o操作,將所讀內容讀入緩衝區;對於寫操作來說,遇到換行符'/n'才進行i/o操作,將緩衝區內容寫到外存中。由於緩衝區的大小是有限的,所以當緩衝區被填滿時,即使沒有遇到換行符'/n',也同樣會進行實際的i/o操作。標準輸入stdin和標準輸出stdout預設都是行緩衝的。
無緩衝:沒有緩衝區,資料會立即讀入或者輸出到外存檔案和裝置上。標準出錯stderr是無緩衝的,這樣保證錯誤提示和輸出能夠及時反饋給使用者,供使用者排除錯誤。
以上3種緩衝區分別定義為3個巨集,其定義如下表所示。
緩衝區型別
定 義 的 巨集
全緩衝_iofbf
行緩衝_iolbf
無緩衝_ionbf
在使用上表所述的緩衝型別巨集時,應將檔案流物件中的緩衝區標誌與該巨集做"與"操作,判斷結果是否為0即可知道該緩衝檔案流的緩衝區是否屬於該型別了。
具體例子參考
幾個退出函式:
1、exit ()。呼叫exit函式之後,它首先會執行一系列的清理處理,包括呼叫執行各終止處理程式,關閉所有標準io流等,然後進入核心。
2、_exit ()。與exit不同的是,它不進行清理工作而直接進入核心。此函式由posix.1說明,放在unistd.h裡面。
3、_exit ()。同樣,它也不進行清理工作而直接進入核心。此函式跟exit一樣由iso c說明,放在stdlib.h裡面。
標準I O緩衝 全緩衝 行緩衝 無緩衝
說明 我只對網路資源進行了整合,方便學習 基於流的操作最終會呼叫read或者write函式進行i o操作。為了使程式的執行效率最高,流物件通常會提供緩衝區,以減少呼叫系統i o庫函式的次數。基於流的i o提供以下3種緩衝 全緩衝 直到緩衝區被填滿,才呼叫系統i o函式。對於讀操作來說,直到讀入的內容...
標準I O緩衝 全緩衝 行緩衝 無緩衝
某日一朋友寫了乙個hello world 出不來結果,如下 include intmain int argc,char argv 注意到,在 中printf語句列印的字串最後沒有帶換行符,而且最後呼叫了 exit函式,這導致了在終端螢幕上顯示不出來字串 hello world 首先介紹一下unix裡...
標準IO緩衝詳解全緩衝 行緩衝 不緩衝
標準i o庫提供緩衝的目的是盡可能地減少使用read和write呼叫的次數。他也對每個i o流自動地進行緩衝管理,從而避免了應用程式需要考慮這一點所帶來的麻煩。不幸的是,標準i o庫最令人迷惑的也是他的緩衝。標準i o提供了三種型別的緩衝 1 全緩衝。這種情況下,在填滿標準i o緩衝區後才進行實際i...