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_main
或 fuse_session_mount
来执行挂载(最终调用 mount.c
中包含实际 mount(2)
系统调用的内部函数 fuse_mount_sys
.
因此,如果您想以编程方式挂载 FUSE 文件系统,正确的做法是分叉并执行相应的 FUSE 可执行文件(例如 sshfs),并让它代表您处理挂载。
请注意 /sbin/mount.fuse
本身并没有实际安装任何东西。它只是一个包装器,允许您通过 mount
命令行实用程序或在启动时通过“/etc/fstab”中的条目挂载 FUSE 文件系统。这就是为什么您在那里找不到任何安装代码的原因。它以我上面描述的相同方式安装 FUSE 文件系统,通过 运行 相关文件系统的 FUSE 可执行文件来执行实际安装。
挂载 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_main
或 fuse_session_mount
来执行挂载(最终调用 mount.c
中包含实际 mount(2)
系统调用的内部函数 fuse_mount_sys
.
因此,如果您想以编程方式挂载 FUSE 文件系统,正确的做法是分叉并执行相应的 FUSE 可执行文件(例如 sshfs),并让它代表您处理挂载。
请注意 /sbin/mount.fuse
本身并没有实际安装任何东西。它只是一个包装器,允许您通过 mount
命令行实用程序或在启动时通过“/etc/fstab”中的条目挂载 FUSE 文件系统。这就是为什么您在那里找不到任何安装代码的原因。它以我上面描述的相同方式安装 FUSE 文件系统,通过 运行 相关文件系统的 FUSE 可执行文件来执行实际安装。