在linux內核中如何識別打開的文件?當我們可以獲得關於inode或(struct file)或dentry的信息時?哪個結構可以幫助我們識別打開的文件是哪個打開的文件?你能告訴我細節嗎?在Linux內核中如何識別打開文件的時候我們可以得到「struct file」
1
A
回答
3
一個物理文件在任何時候只有一個struct inode
。
在大多數文件系統上,即使struct inode
被解除分配並在以後回讀時,inode編號也會保持不變,因此您可以通過該編號(加上設備編號)進行標識,但也有例外。但始終保證至少只有一個設備上的文件在任何給定的時間將具有特定的inode編號(這用於檢查兩個打開的文件句柄指向userland中您無權訪問的同一文件)struct inode
—在內核比較指針會更容易)。
一個文件可能有更多與其關聯的struct file
,一個用於某個進程中的每個文件句柄,並且可能有多個與之關聯的struct dentry
,每個硬鏈接一個。
由此可見,文件系統中的任何路徑只有一個struct dentry
。但是,從不同的進程角度來看,路徑可能看起來不同(認爲chroot和命名空間)。它可以通過沿着denode和inode鏈(每個dentry有父節點inode,每個inode知道當前與它相關的dentries)重建,但必須小心避免當前進程不可見的dentries。
相關問題
- 1. 在Linux中,如何從「struct file」結構中獲取文件名,同時用kgdb跨越內核?
- 2. Linux內核模塊如何知道它的文件何時被打開?
- 3. 我們可以在內核運行期間得到打印輸出嗎?
- 4. 哪裏獲得Linux內核,它可以讓我在內核中訪問信息
- 5. 識別文件打開一個特定的進程在Linux上
- 6. 如何在內核模塊中打印linux內核版本號
- 7. 如何在linux內核的struct page中添加新字段
- 8. 我們可以在android中打開一個swf文件嗎?
- 9. Dreamweaver - 直到它們打開時才識別子文件的模板
- 10. 在啓動我的linux內核時,從內核日誌中的警告中識別代碼
- 11. 我可以在arm linux內核中多久可以調用kalloc?
- 12. Linux內核:可以無限期打開流式DMA映射嗎?
- 13. jQuery File Upload - 如何識別所有文件上傳的時間
- 14. 如何在Linux內核編程中從'dev_t'獲取'device struct'?
- 15. 如何獲得Linux內核中文件的大小?
- 16. 識別後可以打開一個音頻聲音文件嗎?
- 17. 我在哪裏可以得到32位的Linux內核源代碼爲x86
- 18. 如何通過在內核中創建struct文件來獲取文件名?
- 19. GDB:打印可識別的文件
- 20. 文件在列表<File>被「打開」,並得到了內存
- 21. 我們可以用make文件安裝內核模塊
- 22. 如何/在哪裏可以找到Linux內核錯誤修復?
- 23. 從可以在Linux中打開的文件路徑創建文件
- 24. 文檔「Main.Storyboard」無法打開。無法識別的文件內容
- 25. 我們如何識別日誌文件中的已用空間?
- 26. Linux內核如何以及何時在內核3.14.17中調用sysctl_init()?
- 27. Java的聲音可以完美運行在Windows,Linux中我們得到了LineUnavailableException
- 28. 爲什麼打開調用兩個參數(struct inode *,struct file *)?
- 29. Linux內核哈希表struct hlist_head
- 30. 我們可以直接在IDE中打開設計文檔嗎?
謝謝你的答案。我很抱歉我的問題。我想識別的是文件句柄。當我可以在Linux內核中獲得所有文件句柄時,但我不知道如何識別它們是否是相同的。同時文件句柄是一個指針。你能幫我嗎? – user824675
感謝您的幫助。我已經知道了。在Linux內核中,我必須計算系統已訪問的文件數量,並且可以獲取struct dentry和inode。在這種情況下,我可以在syslog中記錄文件系統路徑,然後進行統計?因爲當文件處理更改時指針將被更改(所以不使用inode)。我對嗎?我在哪裏可以得到文件系統路徑?期待你。 – user824675
@ user824675:你可以使用'd_path'函數得到路徑,但是它沒用,因爲一個文件可能有很多路徑(比硬鏈接多得多,因爲文件系統可能被掛載多次,綁定掛載多一些)。如上所述,您必須從'struct inode'中記錄設備和inode數字。 –