理解C語言標準I O函式

2021-05-21 23:47:52 字數 1054 閱讀 5441

通常在c 語言中使用標準i/o 函式的第一步就是用fopen() 開啟乙個檔案( 標準輸入輸出是自己開啟的),fopen() 函式在開啟乙個檔案的同時還建立了乙個緩衝區, 還有乙個包含檔案和緩衝區相關資料的資料結構, 我們熟知的file 指標型別,file 型別的指標並不是指向檔案本身, 而是指向上面所說的包含檔案資訊的資料結構... 不僅如此,fopen() 函式的返回值就是乙個指向該結構的指標, 共其他需要操作該檔案的函式能找到該結構... 假設把這個值賦給了乙個名為fp 的指標變數, 我們稱fopen() 函式開啟乙個流, 如果以文字模式開啟, 可以得道乙個文字流, 如果以二進位制模式開啟, 那麼就得道乙個二進位製流...

這個資料結構通常包括乙個檔案位置指示器, 以確定在流中的當前位置... 還包括乙個錯誤指示器和檔案結尾指示器, 乙個指向緩衝區起始處的指標, 乙個檔案識別符號, 和乙個記錄實際複製到緩衝區的位元組數的計數器...

岔開了...fopen() 函式開啟之後, 就是呼叫stdio.h 檔案中宣告的某個輸入函式, 如fscanf(),getc(),fgets()... 呼叫這些函式中的任意乙個都會把一塊資料從檔案複製到緩衝區中... 緩衝區的大小依賴具體的實現, 但是通常是512 位元組或者它的倍數( 硬碟和記憶體的增大, 緩衝區也在逐漸增大)... 除了填充緩衝區外, 初次函式呼叫還將設定fp 所指的結構中的值... 特別的, 將設定流的當前位置和複製到緩衝區的位元組數.. 一般的當前位置從0 位元組開始...

資料結構和緩衝區初始化以後, 輸入函式將從緩衝區中讀取所請求的資料... 同時, 檔案位置指示器被置為緊隨最後乙個被讀取字元的位置... 因為stdio.h 定義的所有輸入函式都使用同乙個緩衝區, 所以任何乙個被調函式都將在前一次任何函式呼叫停止的地方繼續開始.

當輸入函式檢測到已經讀取了緩衝區中的全部字元時, 會請求系統將下一塊緩衝區大小的資料複製到緩衝區... 通過這種方式, 輸入函式可以讀入檔案中的全部內容, 直到檔案的結尾... 函式在讀入最後一緩衝區資料的最後乙個字元後, 會將檔案結尾指示器的值設定為真, 於是乎... 下乙個被呼叫的輸入函式將返回eof...

相同的方式, 輸出函式將資料寫到緩衝區.. 當緩衝區滿時, 就將資料複製到檔案中...

C語言標準I O

1 標準檔案 標準檔案 檔案指標 一般使用的裝置 標準輸入 stdin鍵盤 標準輸出 stdout 顯示器 標準出錯 stderr 顯示器 2 檔案操作函式 2.1 開啟檔案 include file fopen const char path,const char mode 引數說明 第乙個引數 ...

C語言標準IO

這幾天參加中興捧月比賽,用到了c語言的標準io庫。由於對其中的一些細節不是非常清楚,導致了許多bug,花了好長時間來除錯。所以在此做個筆記,以備後查。1.緩衝區 全緩衝。在這種情況下,當填滿標準i o快取後才進行實際i o操作。對駐留在磁碟上的檔案的訪問通常是由標準i o庫實施全緩衝的。緩衝區可由標...

C語言標準IO

這幾天參加中興捧月比賽,用到了c語言的標準io庫。由於對其中的一些細節不是非常清楚,導致了許多bug,花了好長時間來除錯。所以在此做個筆記,以備後查。1.緩衝區 全緩衝。在這種情況下,當填滿標準i o快取後才進行實際i o操作。對駐留在磁碟上的檔案的訪問通常是由標準i o庫實施全緩衝的。緩衝區可由標...