檔案描述符和檔案系統

ruo_bing發表於2018-08-24

對檔案描述符的理解:

  • 檔案描述符,作業系統通過一個整數代表開啟的檔案,將這個整數稱為~。

  • 檔案流指標用於庫函式操作io檔案

  • 檔案描述符用於系統呼叫介面操作函式

  • 檔案流指標的結構體裡面的一個成員就是檔案描述符

程式如何通過檔案一個數字(檔案描述符)來操作檔案呢?
每個PCB 有個指標file*指向一個檔案結構體,裡面有個陣列指標,而陣列中的每個與元素則是存放開啟檔案的指標file*
檔案描述符就是程式pcb中file_stuct結構體中陣列的下標
這裡寫圖片描述
file 結構體中除了有一個成員是檔案描述符,結構體中還有使用者態的緩衝區

檔案描述符分配規則:

檔案描述符的分配是有限的,因為它就是下標,所以檔案開啟一定要關閉

分配規則:每次找未使用的最小位

重定向

將(檔案描述符)下標所對應的檔案描述替換成另外一個檔案描述)
例如原本指向 test.txt,用dup2重新指向test.fd
這裡寫圖片描述這裡寫圖片描述

標準輸入輸出重定向:

標準輸入重定向:原本從標準輸入讀取資料重新定向為從其他檔案讀取資料
標準輸出重定向:把原來要輸出的標準內容(輸出到螢幕),重新定向後輸出到指定的檔案當中。

  1. 標準輸入重定向(很少用)
    <
  2. 標準輸出重定向
     清空原有內容後新增新內容 <br>
    
    在原來的內容後新增新內容
   ls    2>&1       >/dev/null      //    2裡面的內容放在1裡面輸出,1裡面的內容放在檔案/dev/null    
   ls   >/dev/null    2>&1      //  >前面數字,預設1
對 ls 2>&1 >/dev/null 解釋如下圖: ![這裡寫圖片描述](https://img-blog.csdn.net/20180823152913594?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3J1b19iaW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

檔案系統

檔案系統板塊:

這裡寫圖片描述

超級塊:存放檔案本身結構資訊

索引塊:檔案在磁碟從放的位置
inode點陣圖:在inode節點區搜尋哪裡有空的inode
date點陣圖:在inode節點區搜尋哪裡有存放資料的空位置
inode節點區:存放檔案的其他一些兒資訊

資料區:檔案的內容

軟連線:

如何產生:ln -s 原檔案 tmp.soft(軟連線檔名)

硬連結:

如何產生 ln 檔名 檔名.hard

對軟連線和硬連結的理解:

軟連線可看做是一個快捷方式,通過軟連線檔案可以找到其他位置的檔案,軟連線檔案中儲存的是所指的另一個檔案的路徑名,通過路徑定位來定位所指檔案。它針對的是一個檔名,硬連結更像是對目錄項(或檔案)的備份
硬連結更像是一個檔案的別名,它有自己的目錄項,但並沒有單獨的inode節點和資料區,硬連結的inode號,與原始檔的相同。那麼我們刪除一個檔案時,實際上是將inode節點的連線數-1,當連結數為0時,檔案就真的刪除了,釋放節點和資料區

兩者區別:

  1. 軟連線有自己的inode結點,硬連結的inode號,與原始檔的相同
  2. 軟連線可以對目錄進行操作(比如建立),硬連結不可以
    3 刪除原始檔對硬連結檔案沒有影響,只是inode中的連結數-1,對軟連線有影響,軟連線將斷開,就找不到檔案
  3. 硬連結不能跨分割槽建立但連線可以

有幾個檔名對應著同一個incode,就叫硬連結幾,比如有兩個檔案對應著同一個incode,就叫軟連線2

相關文章