Unix程式設計學習筆記---檔案系統與 i節點
檔案系統: i節點與磁碟檔案
:
首先提出我的一些問題:
1. 檔案描述符fd 、檔案物件、i節點、磁碟檔案之間是什麼關係???
a) 檔案物件:表示程序已經開啟的檔案在記憶體中的表示,該物件不是物理上的檔案,
b) 檔案物件在記憶體中有一段儲存內容。
c) 每一個檔案物件都包含:檔案的狀態資訊、記憶體中儲存檔案內容的緩衝區指標,以及當前檔案的讀寫位置等。在檔案物件中,存有檔案的iNode節點資訊。
d) 檔案描述符-------》檔案物件------》iNode節點-------》磁碟檔案
2. 如何將一個字串形式的路徑名,轉換為一個檔案在核心中的iNode號??
3. iNode節點都有哪些資訊???
4. 如何才能由i節點定位到檔案在磁碟上的實體地址的???
1》 目錄檔案中存有每一個檔案的檔名和該檔名所對應的iNode號。
2》 iNode_table檔案即:iNode節點表文件,該檔案存有iNode號和該iNode號節點的結構體指標, 在iNode節點中存有該iNode節點所指向的在磁碟上的磁碟塊的指標。
3》 每一個iNode節點,都對應有一個磁碟檔案,該檔案要麼是目錄項或者是普通檔案
4》 要點:
1. iNode節點都有哪些資訊??
a) 每一個iNode節點都有一個描述它的磁碟資料結構,在iNode節點中存有該iNode節點所對應的檔案在磁碟上的資料塊的指標和檔案的資料塊數。
2. 目錄檔案的作用:
a) 完成檔名到iNode號的對映。
b) 即:給定一個檔名找出其所對應的iNode號。
3. 每一個iNode節點都能唯一定位一個磁碟檔案。
4. 在磁碟上,儲存的有兩種檔案:
a) 1目錄檔案
b) 普通檔案
5. 我們來看一下,磁碟結構:
如何將一個字串形式的路徑名,轉換為一個檔案在核心中的iNode號?????
例項:/home/my/code/test.c
這個工作流程:
1. 首先:把這個路徑名拆分成一個個檔名序列,除了最後一項以外,所有的檔名都必定是目錄。
在這裡是: home、 my 、 code、test.c
2. 核心會存有一個根目錄檔案,然後核心會把分析出的第一個檔名home,與根目錄中的檔名進行匹配,如果找到匹配項,則把該目錄項的iNode號提出出來,home的iNode號是2
3. 核心得到一個iNode號,便會在iNode_table 中找到該iNode 號所對應的檔案在磁碟上的資料塊地址,然後,根據資料塊的地址,把檔案內容讀取到記憶體當中。
4. 然後繼續分析下一個檔名。
5. 重複以上工作。
我們發現,home檔名的iNode號的磁碟檔案是一個目錄檔案,該目錄檔案中的iNode號指向的又是一個目錄檔案,只有路徑名中的最後一個檔名的iNode節點號所對應的磁碟檔案是一個普通檔案。因此,把此普通檔案讀取到記憶體中。