檔案(file)
把檔案想成檔案櫃裡一個貼了標籤的資料夾,只是這個櫃子是你的磁碟,標籤就是檔案的名稱。裡面裝的是你放進去的任何東西:文件的文字、照片的像素、程式的位元組。檔案的重點在於:你可以替它取名、把它存起來、關掉電腦、明天再回來,然後在同一個名稱底下找到一模一樣的內容。它是我們用來儲存「應該活得比任何單一執行中程式還久」的資訊的日常單位。
在底層,儲存裝置只提供一個巨大的、編了號的區塊陣列,就像一座放滿相同編號箱子的倉庫。檔案是作業系統蓋在其上的抽象:一段有名字的位元組序列,你可以把它當成一條連續的串流來讀寫,而作業系統則默默記住到底是哪些分散的區塊真正裝著你的資料。對程式而言,檔案就只是一段從 0 開始編號的連續位元組;那些位元組究竟住在碟片上的一個地方還是五十個地方,是檔案系統的問題,不是你的問題。作業系統還會把關於這個檔案的一些小事實(名稱、大小、擁有者、時間戳記)和資料本身分開記錄。
為什麼重要:檔案大概是整個計算領域裡最成功的單一抽象。它把實體儲存那些混亂的細節藏在一個簡單、統一的觀念背後,使得同一套讀寫操作不論資料在旋轉的磁碟、快閃隨身碟、甚至網路上都能運作。一個常見的誤解是把檔案當成磁碟上的某個實體物件;其實它是作業系統與你之間維持的一份契約,把一個名稱與一串位元組對應到任何剛好可用的原始區塊上。
你存了一份只有一行的文字文件,叫做 notes.txt。在磁碟上,它那 30 個位元組其實可能放在第 4192 號區塊裡。但對你而言,它就只是「notes.txt」,一個你可以開啟、編輯、關閉的東西。作業系統記住了名稱到區塊的對應,所以你永遠不必去想第 4192 號區塊。
一個名稱加上一串位元組;作業系統把這些位元組實際住在哪裡藏了起來。
檔案是面向使用者的抽象。它的位元組實際上如何散布在磁碟區塊間是另一個主題(檔案系統實作),而儲存它們的裝置又是另一回事(儲存裝置)。