FUSE 文件系统的 libmount 等价物

libmount equivalent for FUSE filesystems

挂载 FUSE 文件系统的 libmount 等效函数是什么。我知道 FUSE 不是真正的文件系统,我的 mount.fuse strace 显示打开一个 /dev/fuse 文件并进行一些复杂的操作。

我试图通过阅读 it's source code 来了解 mount.fuse 是如何工作的,但它不仅因 C 中的字符串操作而不必要地复杂化,而且它是一个 GPL 程序。

我的问题是,我是否缺少明显的 API 来挂载 fuse 文件系统?

安装 FUSE 文件系统的内核接口在 "linux/Documentation/filesystems/fuse.txt" 中描述(例如,参见 here)。

简而言之,您调用 mount(2) 就像挂载任何文件系统一样。但是,关键区别在于您必须提供挂载选项 fd=n,其中 n 是您通过打开 /dev/fuse 获得的文件描述符,用户将使用它space 执行文件系统以响应内核请求的进程。

特别是,这意味着安装实际上是由实现文件系统的用户 space 程序 执行的。 具体来说,大多数 FUSE 文件系统使用 libfuse 并调用函数 fuse_mainfuse_session_mount 来执行挂载(最终调用 mount.c 中包含实际 mount(2) 系统调用的内部函数 fuse_mount_sys .

因此,如果您想以编程方式挂载 FUSE 文件系统,正确的做法是分叉并执行相应的 FUSE 可执行文件(例如 sshfs),并让它代表您处理挂载。

请注意 /sbin/mount.fuse 本身并没有实际安装任何东西。它只是一个包装器,允许您通过 mount 命令行实用程序或在启动时通过“/etc/fstab”中的条目挂载 FUSE 文件系统。这就是为什么您在那里找不到任何安装代码的原因。它以我上面描述的相同方式安装 FUSE 文件系统,通过 运行 相关文件系统的 FUSE 可执行文件来执行实际安装。