在硬連結和連接MSDN文章一可以閱讀以下內容:
硬連結是檔案的檔案系統表示形式,透過它多個路徑引用同一卷中的單一檔案。若要建立硬鏈接,請使用 CreateHardLink 函數。透過引用該檔案的硬連結存取該檔案的應用程式可以立即看到對該檔案的任何變更。但是,僅針對進行變更的連結更新目錄條目大小和屬性資訊。請注意,檔案的屬性會反映在該檔案的每個硬連結中,並且對該檔案屬性的變更會傳播到所有硬連結。例如,如果您重置硬鏈接上的 READONLY 屬性以刪除該特定硬鏈接,並且實際文件有多個硬鏈接,則您需要將文件上的 READONLY 位從剩餘硬鏈接之一重置為將文件和所有剩餘的硬連結恢復為READONLY 狀態。
有人能理解上面這段話嗎?
聲明不是文件的屬性反映在該文件的每個硬連結中相當於聲明對該文件屬性的變更會傳播到所有硬鏈接?
怎麼會重置唯讀位可以將文件和所有剩餘的硬連結恢復為 READONLY 狀態?
編輯
在閱讀了 JdeBP 對這個問題的出色回答後,我仍然心存疑慮。
我了解指向該條目的每個硬連結都有 MFT 條目的部分副本$STANDARD_INFORMATION
,根據答案除非重命名、創建或銷毀硬鏈接,否則甚至不會保持最新狀態。當讀取硬連結的屬性時會發生什麼?我猜這個硬連結的副本$STANDARD_INFORMATION
會被忽略,因為它可能無法反映當前狀態,並且屬性是直接從 MFT 條目的$STANDARD_INFORMATION
.此外,在此過程中不會更新任何信息,因為它不是您列出的任何操作。是這樣嗎?
如果將 R 位元設為關閉以便能夠刪除到檔案的硬鏈接,那麼(假設這不是最後一個連結)必須以任何方式再次將 R 位元設為打開,才能建立檔案再次只讀。
現在,我不明白假設這不是最後一個鏈接部分。我不明白最後一個連結在這裡有什麼區別。仍然有一個文件(MFT 的條目)本身,並且可以直接更改其屬性(而不是透過任何連結)。或者如果有一個文件,就會有一個鏈接,這意味著 MFT 的條目和文件之間沒有一一對應的關係?
答案1
正如grawity
所說,第二次「重置」要不是寫得不好,就是徹底的錯誤。
聲明不是文件的屬性反映在該文件的每個硬連結中相當於聲明對該文件屬性的變更會傳播到所有硬鏈接?
不。在 NTFS 上,MFT 中的每個項目可以有零個或多個$FILE_NAME
屬性。它們記錄了檔案的每個硬連結的父目錄和該目錄中的名稱。但他們也記錄檔案屬性標誌,雖然這些標誌記錄在 MFT 條目的單一$STANDARD_INFORMATION
屬性中。這些規則有點複雜,但簡單地說,$STANDARD_INFORMATION
重要的是資訊甚至不會保持最新,除非$FILE_NAME
硬連結被重命名、創建或銷毀——這需要接觸屬性$FILE_NAME
,當前的點也是如此。$FILE_NAME
開發人員可能向撰寫 MSDN 文章的技術作者解釋了 NTFS 的具體細節。但它們實際上與最終用戶甚至應用程式程式設計師沒有任何相關性。這些是 NTFS 如何運作的內部細節。從 Win32 的角度來看,檔案/目錄恰好具有一屬性標誌集,更新它就是更新它,但已經完成了。如果R
為了刪除檔案的硬連結而將該位元設為關閉,那麼(假設這不是最後一個連結)必須R
以任何方式再次將該位元設為打開,以使該檔案可讀 -只能再一次。