C語言檔案概述
C語言檔案概述
檔案是資料來源的一種,最主要的作用是儲存資料。在作業系統中,為了統一對各種硬體的操作,簡化介面,不同的硬體裝置也都被看成一個檔案。對這些檔案的操作,等同於對磁碟上普通檔案的操作。例如,通常把顯示器稱為標準輸出檔案,printf就是向這個檔案輸出,把鍵盤稱為標準輸入檔案,scanf就是從這個檔案獲取資料。
常見硬體裝置與檔案的對應關係 |
|
檔案 |
硬體裝置 |
stdin |
標準輸入檔案,一般指鍵盤;scanf()、getchar() 等函式預設從 stdin 獲取輸入。 |
stdout |
標準輸出檔案,一般指顯示器;printf()、putchar() 等函式預設向 stdout 輸出資料。 |
stderr |
標準錯誤檔案,一般指顯示器;perror() 等函式預設向 stderr 輸出資料(後續會講到)。 |
stdprn |
標準列印檔案,一般指印表機。 |
我們不去探討硬體裝置是如何被對映成檔案的,大家只需要記住,在C語言中硬體裝置可以看成檔案,有些輸入輸出函式不需要你指明到底讀寫哪個檔案,系統已經為它們設定了預設的檔案,當然你也可以更改,例如讓
操作檔案的正確流程為:開啟檔案 --> 讀寫檔案 --> 關閉檔案。檔案在進行讀寫操作之前要先開啟,使用完畢要關閉。
所謂開啟檔案,就是獲取檔案的有關資訊,例如檔名、檔案狀態、當前讀寫位置等,這些資訊會被儲存到一個 FILE 型別的結構體變數中。關閉檔案就是斷開與檔案之間的聯絡,釋放結構體變數,同時禁止再對該檔案進行操作。
在C語言中,檔案有多種讀寫方式,可以一個字元一個字元地讀取,也可以讀取一整行,還可以讀取若干個位元組。檔案的讀寫位置也非常靈活,可以從檔案開頭讀取,也可以從中間位置讀取。
檔案流
所有的檔案(儲存在磁碟)都要載入記憶體才能處理,所有的資料必須寫入檔案(磁碟)才不會丟失。資料在檔案和記憶體之間傳遞的過程叫做檔案流,類似水從一個地方流動到另一個地方。資料從檔案複製到記憶體的過程叫做輸入流,從記憶體儲存到檔案的過程叫做輸出流。
檔案是資料來源的一種,除了檔案,還有資料庫、網路、鍵盤等;資料傳遞到記憶體也就是儲存到C語言的變數(例如整數、字串、陣列、緩衝區等)。我們把資料在資料來源和程式(記憶體)之間傳遞的過程叫做資料流(Data Stream)。相應的,資料從資料來源到程式(記憶體)的過程叫做輸入流(Input Stream),從程式(記憶體)到資料來源的過程叫做輸出流(Output Stream)。
輸入輸出(Input output,IO)是指程式(記憶體)與外部裝置(鍵盤、顯示器、磁碟、其他計算機等)進行互動的操作。幾乎所有的程式都有輸入與輸出操作,如從鍵盤上讀取資料,從本地或網路上的檔案讀取資料或寫入資料等。通過輸入和輸出操作可以從外界接收資訊,或者是把資訊傳遞給外界。
我們可以說,開啟檔案就是打開了一個流。