2011-08-11 42 views

回答

3

一個物理文件在任何時候只有一個struct inode

在大多數文件系統上,即使struct inode被解除分配並在以後回讀時,inode編號也會保持不變,因此您可以通過該編號(加上設備編號)進行標識,但也有例外。但始終保證至少只有一個設備上的文件在任何給定的時間將具有特定的inode編號(這用於檢查兩個打開的文件句柄指向userland中您無權訪問的同一文件)struct inode —在內核比較指針會更容易)。

一個文件可能有更多與其關聯的struct file,一個用於某個進程中的每個文件句柄,並且可能有多個與之關聯的struct dentry,每個硬鏈接一個。

由此可見,文件系統中的任何路徑只有一個struct dentry。但是,從不同的進程角度來看,路徑可能看起來不同(認爲chroot和命名空間)。它可以通過沿着denode和inode鏈(每個dentry有父節點inode,每個inode知道當前與它相關的dentries)重建,但必須小心避免當前進程不可見的dentries。

+0

謝謝你的答案。我很抱歉我的問題。我想識別的是文件句柄。當我可以在Linux內核中獲得所有文件句柄時,但我不知道如何識別它們是否是相同的。同時文件句柄是一個指針。你能幫我嗎? – user824675

+0

感謝您的幫助。我已經知道了。在Linux內核中,我必須計算系統已訪問的文件數量,並且可以獲取struct dentry和inode。在這種情況下,我可以在syslog中記錄文件系統路徑,然後進行統計?因爲當文件處理更改時指針將被更改(所以不使用inode)。我對嗎?我在哪裏可以得到文件系統路徑?期待你。 – user824675

+1

@ user824675:你可以使用'd_path'函數得到路徑,但是它沒用,因爲一個文件可能有很多路徑(比硬鏈接多得多,因爲文件系統可能被掛載多次,綁定掛載多一些)。如上所述,您必須從'struct inode'中記錄設備和inode數字。 –

相關問題