如何为 FUSE 文件系统指定基目录?

How to specify base directory for FUSE filesystem?

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

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

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

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

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

令人惊讶的是,执行此操作的方法似乎是简单地从解析到 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