
如果軟連結和硬連結都是指向檔案的指標。
文件描述符是指向開啟檔案的檔案句柄。
如果兩者都是指向檔案的指針,那麼兩者之間到底有什麼差別呢?
此外,硬連結指向文件內容的位址位置,文件描述符也指向文件內容,那麼這裡到底有什麼不同。硬連結也有自己的檔案描述符。
答案1
從哲學上講,可以說它們沒有不同。
但它們在使用和實施的原因、地點和方式上完全不同。
首先,硬連結和軟/符號連結都是目錄條目,即它們是稱為目錄的特殊格式檔案中的條目/記錄,其中每個記錄都保存一個名稱和一個索引節點號——後者指的是保存該目錄的真實結構。
硬連結和符號連結之間的區別在於,硬連結指向的索引節點包含實際數據,而符號連結指向的索引節點包含另一個檔案的路徑。基本上,符號連結本身就是難的指向特殊類型文件的鏈接,就像命名管道、unix 域套接字文件等。
現在,當核心開啟一個檔案時,它會建立一個記憶體結構,從磁碟複製 inode,並包含一些相同的元資料(權限、包含資料的區塊清單、大小等)。該結構由另一個稱為“打開文件描述”的結構指向(它保存諸如位置指針之類的內容,文件是以讀寫模式還是只讀模式打開的,是否應該以非阻塞方式讀寫)模式等)。最後,該結構由另一個內核(每個進程)結構中的條目指向,該結構是一個稱為檔案描述符表的陣列/表。
「檔案描述子」(由 open(2) 等系統呼叫傳回的整數)是該表的索引。
記憶體中的索引節點可以由多個「開啟檔案描述」指向,而多個「開啟檔案描述」本身可以由來自多個進程的多個檔案描述符指向。
有些系統呼叫(例如 open(2))會特殊對待符號連結-當它們開啟的檔案原來是符號連結時,它們會繼續嘗試開啟由其內容路徑命名的檔案。
磁碟結構(目錄、索引節點)和核心/記憶體結構(索引節點、開啟檔案描述)都使用引用計數來追蹤哪個結構正在使用哪個結構。 (不,核心中沒有任何標記和清除垃圾收集器,它會跳轉記憶體或磁碟上的指標來確定哪些物件不再從其他任何地方引用;-))。