2011-07-16 204 views
2

如何循環遍歷FUSE文件系統超級塊中的inode?文檔沒有說明這一點。FUSE文件系統操作

+0

你是什麼意思*循環inodes *? – kamae

+0

我的意思是我希望能夠有一個指向每個inode的指針 - 可能是某種結構。 – atx

+6

FUSE是一個接口,而不是文件系統。由FUSE後端表示的虛擬文件系統可能沒有inode或超級塊,並且它可能根本無法以可枚舉的方式表示文件。 (例如,編寫一個包含每個可能的文件名的FUSE文件系統是容易的,每個文件都包含它的名字。) – duskwuff

回答

4

您可以通過在活動FUSE實例的掛載點處調用nftw()來遍歷可見列表(具有條目的列表)。您提供的回調將給出文件系統中每個條目的路徑和struct stat。您可以通過對返回路徑的系統調用與相應的inode進行交互。

+0

製作'nftw'。我相信它略微更加靈活,並且意味着過時的簡單'ftw'。 –

4

FUSE不是文件系統,也不包含傳統的inode。最好將其視爲實現與UNIX文件系統API提供的相反的內容。例如,當你打開一個文件時,你生成一個文件打開系統調用。內核然後接受該系統調用並返回一個文件。

FUSE做的是從內核將系統調用重定向到用戶空間中的FUSE應用程序。然後,應用程序決定如何響應該系統調用並將某些內容返回給內核。內核然後將該響應傳遞迴原始調用應用程序。

在許多情況下,當您使用FUSE安裝某些東西時,您並未安裝物理介質。在FUSE文件系統中打開文件時,可能會在某個實際文件系統上創建臨時文件,將數據複製到該文件,然後將FUSE文件上的大多數文件操作調用重定向到其創建的臨時文件。

大多數FUSE應用程序實現stat,並提供大多數真實INODE結構可能具有的信息,但是,這些信息通常不具有指向它的指針方面。

從技術的角度來看,您可以在FUSE中實現類似EXT3的操作,在這裏將EXT3文件系統作爲掛載參數進行掛載。在這種情況下,你可以想象真正的INODES,可能會帶有實際的INODE指針。然而,EXT3的實現可能相當不受歡迎,因爲每個文件系統調用都會涉及從用戶空間到內核到FUSE用戶空間到內核到FUSE用戶空間到內核,然後最終返回到您的應用程序。對於性能不重要的文件系統,FUSE更有意義。

+0

好的,謝謝。我認爲馬特有我解決之後的解決方案。 – atx