【问题标题】:How to specify base directory for FUSE filesystem?如何为 FUSE 文件系统指定基目录?
【发布时间】:2017-05-05 12:38:08
【问题描述】:

我正在尝试使用基于 libfuse 的 Haskell 包装器 HFuse 创建一个名为 ordered-dirs 的 FUSE 文件系统。该文件系统是“派生文件系统”,即它采用现有目录(“基本目录”)并生成不同的视图。

但是,当我尝试运行我的 FUSE 文件系统程序,以普通的 mount 方式指定参数时,我得到一个错误:

$ ordered-dirs /home/robin/tasks/ /home/robin/to
fuse: invalid argument `/home/robin/to'

在 HFuse(或似乎在 libfuse)中没有办法获取基本目录(第一个参数),所以我刚刚编写了自己的代码来获取它。但是,失败的不是这段代码——它是 C libfuse 本身中的代码——如错误消息所示。

那么,将基目录传递给使用 libfuse 解析其参数的 fuse 文件系统可执行文件的正确方法是什么?

【问题讨论】:

  • 奇怪! mount.fuse 自 11 年前创建以来,总是按此顺序将参数传递给 FUSE 文件系统可执行文件!

标签: mount fuse


【解决方案1】:

令人惊讶的是,这样做的方法似乎是简单地从解析到 libfuse 解析器的命令行参数中去除基本目录参数,以便 libfuse 永远不会看到它。

在 HFuse 的特殊情况下,这可以通过调用 fuseRun 来完成,这允许显式传递命令行参数。你可以看到我是如何做到这一点的here - 这是相关代码(我在其中调用了基本目录source):

main :: IO ()
main = do
    args <- getArgs
    let (maybeSource, remainder) = extractSource args
    source <- maybe (fail "source not specified") return maybeSource
    fuseRun "ordered-dirs" remainder (orderedDirOps source) defaultExceptionHandler

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 2011-12-03
    • 2013-08-09
    • 2018-05-13
    • 2017-10-04
    相关资源
    最近更新 更多