標準I O的機理

2021-07-23 12:12:12 字數 863 閱讀 5686

通常,使用標準i/o的第一步是呼叫fopen()開啟檔案。fopen()函式不僅開啟了乙個檔案,還建立了乙個快取區(在讀寫模式下會建立兩個快取區)以及乙個包含檔案和快取區資料的結構。另外,fopen()返回乙個指向該結構的指標,以便其他函式知道如何找到該結構。假設把該指標賦給乙個指標變數fp, 我們說fopen()函式」開啟乙個流「。如果以文字模式開啟該檔案,就獲得乙個文字流;如果以二進位制模式開啟該檔案,就獲得乙個二進位製流。

這個結構通常包含乙個指定流中當前位置的檔案位置指示器。除此之外,它還包含錯誤和檔案尾的指示器、乙個指向快取區開始處的指標、乙個檔案識別符號和乙個計數(統計世紀拷貝進快取區的位元組數)。

我們主要考慮檔案輸入。通常,使用標準i/o的第二步是呼叫乙個定義在stdio.h中的輸入函式,入fscanf()、getc()或fget().一呼叫這些函式,檔案中的資料塊就被拷貝到快取區中。快取區的大小因實現而異,一般是512位元組或是它的倍數,如4096或16384(隨著計算機硬碟容量越來越大,快取區的大小也越來越大)。最初呼叫函式,除了填充快取區外,還要設定fp所指向的結構中的值。尤其要設定流中的當前位置和拷貝進快取區的位元組數。通常,當前位置從位元組0開始。

在初始化結構和快取區後,輸入函式按要求從快取區讀取資料。在它讀取資料時,檔案位置指示器被設定為指向剛讀取字元的下乙個字元。由於stdio.h系列的所有輸入函式都使用相同的快取區,所以呼叫任何乙個函式都會從上一次函式停止呼叫的位置開始。

當輸入函式發現已讀完快取區的所有字元時,會請求把下乙個快取區的資料塊從檔案拷貝到該快取區中。以這種方式,輸入函式可以讀取檔案中的所有內容,知道檔案末尾。函式在讀取快取區的最後乙個字元後,把結尾指示器設定為真。於是,下一次被呼叫的輸入函式將返回eof。

輸出函式以類似的方式把資料寫入快取區。當快取區被填滿時,資料將拷貝值檔案中。

I O 標準 I O 實驗

一 測試標準 i o 一次可以同時開啟多少個檔案 1 實驗思路 利用迴圈同時開啟檔案,直到不能開啟 2 如下 二 fgetc 和 fputc 實現拷貝檔案並輸出檔案行數 1 實驗思路 開啟檔案,用 fgetc 讀取,然後 fputc 輸出 2 如下 三 fgetc 和 putchar 實現只輸出字母...

標準IO以及標準IO實現拷貝

1 include 2 include 3 include 4int main 513char s this is test.14 size t ret fwrite s,1 strlen s fp 15 if 0 ret 16 寫完指標指向最後,如果讀的話需要移動指標 20fseek fp,0,s...

檔案標準標準IO與檔案IO 的區別

首先宣告,我是乙個菜鳥。一下文章中出現技術誤導情況蓋不負責 先來了解下什麼是標準 以及檔案 標準 標準i o是ansi c建立的乙個標準i o模型,是乙個標準函式包和stdio.h標頭檔案中的定義,擁有必定的可移植性。標準io庫處理很多細節。例如快取分配,以優化長度執行io等。標準的io供給了三種型...