安装fuse文件系统的libmount等效函数是什么?我知道fuse不是一个真正的文件系统,我的mount.fuse示例显示打开/dev/fuse文件并执行一些复杂的操作。
我试图通过阅读it's source code来了解mount.fuse是如何工作的,但它不仅在c中不必要地被字符串操作复杂化,而且是一个gpl程序。
我的问题是,我是否遗漏了装载fuse文件系统的明显api?

最佳答案

安装fuse文件系统的内核接口在“linux/documentation/filesystems/fuse.txt”中描述(例如,请参见here)。
简而言之,调用mount(2)就像挂载任何文件系统一样。但是,关键的区别在于,必须提供mount选项fd=n,其中n是通过打开/dev/fuse获得的文件描述符,实现文件系统的用户空间进程将使用它来响应内核请求。
特别是,这意味着挂载实际上是由实现文件系统的用户空间程序执行的。具体来说,大多数fuse文件系统使用libfuse并调用函数fuse_mainfuse_session_mount来执行mount(它最终调用fuse_mount_sys中包含实际mount.c系统调用的内部函数mount(2))。
因此,如果您想以编程方式挂载fuse文件系统,正确的方法是分叉并执行相应的fuse可执行文件(例如sshfs),并让它代表您处理挂载。
请注意,/sbin/mount.fuse本身实际上并不挂载任何东西。它只是一个包装器,允许您通过“/etc/fstab”中的条目通过mount命令行实用程序或在引导时装载fuse文件系统。这就是为什么在那里找不到任何安装代码。它像我上面描述的那样装载fuse文件系统,为有问题的文件系统运行fuse可执行文件来执行实际的装载。

关于linux - 与FUSE文件系统等效的libmount,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43563589/

10-12 05:22