2016-09-21 17 views
0

我正在嘗試爲Rust中的REST API編寫一個FUSE接口。我正在使用rust-fuse庫。在實現Filesystem特性時,我需要readdir回調函數中的目錄路徑,但該函數只需要一個inode!如何找到防鏽保險絲的路徑?

如何找到文件的路徑?它以某種方式嵌入在Request

我可以創建一個inode <-> path地圖,但這會讓事情太複雜。 Python和Haskell FUSE庫都將路徑作爲參數傳遞給回調函數,而不是inode。

fn readdir(&mut self, 
      req: &Request, 
      ino: u64, 
      _fh: u64, 
      offset: u64, 
      mut reply: ReplyDirectory) { 
    // ... 
} 

回答

2

它出現的庫不提供這個尚未:

From the README(重點煤礦):

待辦事項

仍然有很多東西要做。隨意貢獻。

  • 中斷文件系統操作尚未處理。額外的 更高層次的API會很好。 它應該提供路徑名,而不是 索引節點號,並自動處理併發和中斷 (如FUSE C庫的高級API)。

看樣子你將需要分配一個唯一的索引節點,當您打開/列出目錄/文件,跟蹤索引節點爲路徑的映射,並使用該以後。

根據您的API結構,您也可以直接將一些信息編碼到inode中。例如,您可能有32個端點,因此您可以將每個端點編碼爲5位數並稍後進行解碼。那麼只有inode的一個子集需要具有任意值。

+0

是的,它是可行的,但它使邏輯不必要的複雜。添加路徑應該很簡單,因爲對於其他一些功能也是如此,例如'lookup'。找到'let name = data.fetch_path();'在https://github.com/zargony/rust-fuse/blob/86fd79d6b6569cd5f355c0cb5a6811146fc63134/src/request.rs – Hapal

+1

我剛剛克隆了repo並添加了到'readdir'的路徑功能,它工作正常!我會很快做出公關。 – Hapal

+0

@Hapal嘿,那就是作弊!^_ ^但是,這聽起來像是對我的一個很好的答案。 – Shepmaster