安装FUSE文件系统的libmount等效函数是什么。我知道FUSE不是一个真正的文件系统,我的mount.fuse文件显示打开/ dev / fuse文件并进行一些复杂的操作。
我尝试通过阅读it's source code来了解mount.fuse的工作原理,但不仅仅是C语言中的字符串操作不必要地复杂化,它还是一个GPL程序。
我的问题是,我是否错过了安装保险丝文件系统的明显API?
答案 0 :(得分:2)
用于安装FUSE文件系统的内核接口在“linux / Documentation / filesystems / fuse.txt”中描述(例如,参见here)。
简而言之,您可以像挂载任何文件系统一样调用mount(2)
。但是,关键的区别在于您必须提供挂载选项fd=n
,其中n
是您通过打开/dev/fuse
获得的文件描述符,并且将由实现该实现的用户空间进程使用文件系统响应内核请求。
特别是,这意味着实际上由实现文件系统的用户空间程序执行。具体来说,大多数FUSE文件系统使用libfuse
并调用函数{{1}或fuse_main
执行mount(最终调用包含实际fuse_session_mount
系统调用的fuse_mount_sys
中的内部函数mount.c
)。
因此,如果要以编程方式挂载FUSE文件系统,正确的方法是fork和exec相应的FUSE可执行文件(例如sshfs)并让它代表您处理挂载。
请注意mount(2)
实际上并没有安装任何东西。它只是一个包装器,允许您通过{/ 1}}命令行实用程序或启动时通过“/ etc / fstab”中的条目安装FUSE文件系统。这就是为什么你在那里找不到任何安装代码的原因。它通过运行相关文件系统的FUSE可执行文件来执行实际安装,就像我上面描述的那样安装FUSE文件系统。