亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 FUSE 以目錄形式命名管道

使用 FUSE 以目錄形式命名管道

Go
ITMISS 2023-07-26 19:29:28
我想創建一個 FUSE 文件系統,它接受對文件系統內任何路徑的任何類型的寫入操作。有點像命名管道,但采用目錄的形式。echo test > bar         # consumes "test"echo test > bar/foo     # consumes "test", even though the directory "bar" hasn't been createdecho test > x/y/z/test  # consumes "test", even though the directories "x/y/z" haven't been created我使用bazil.org/fuse進行實施。我面臨的問題是,當應用程序想要寫入foo/bar我的文件系統內部時,它會檢查是否foo是目錄,然后檢查是否bar是文件。不幸的是,我無法預先知道foo應該是文件還是目錄。我的Attr函數如下所示:func (d *Dir) Attr(ctx context.Context, a *fuse.Attr) error {        a.Inode = 1        a.Mode = os.ModeDir | 0755}此代碼特定于目錄節點類型,因為os.ModeDir. 我希望這適用于目錄或文件。有辦法實現我想要的嗎?去保險絲
查看完整描述

1 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

我面臨的問題是,當應用程序想要寫入foo/bar我的文件系統內部時,它會檢查是否foo是目錄,然后檢查是否bar是文件。不幸的是,我無法預先知道foo應該是文件還是目錄。

考慮到這些限制,解決您的問題是不可能的。

文件系統節點可以是文件,也可以是目錄;有時兩者都不是,但絕不會同時兩者。因為您的 FUSE 驅動程序無法提前知道執行請求的應用程序是否getattr意味著在節點內遞歸,直到它實際嘗試這樣做,所以您無法知道它是否應該偽裝成文件或目錄。

您最好的選擇似乎是:

  • 將特定于應用程序的虛擬目錄結構硬編碼到您的 FUSE 驅動程序中

  • 在 FUSE 驅動程序中實施特定于應用程序的啟發式方法

  • 讓您的 FUSE 驅動程序記住getattr請求并通過反復試驗構建虛擬目錄樹(并不斷重新運行應用程序直到它起作用)


查看完整回答
反對 回復 2023-07-26
  • 1 回答
  • 0 關注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號