我有一个远程文件系统,我可以通过webdav通过
挂载sudo mount -t davfs https://myserver.com /tmp/dav
此时会提示我输入用户名和密码。
然后我在fstab中添加了一个条目,并创建了一个~/.davfs2/secrets file
。
如果我现在运行
mount /tmp/dav
有效。
现在我需要从C代码中自动从我的应用程序中安装它。
如果我打电话:
int result = mount("https://myserver.com", "/tmp/dav", "davfs", 0, "user,noauto,file_mode=600,dir_mode=700");
Mount返回结果-1并且errno设置为19:strerror打印“no such device”。
装载手册页显示:
ENODEV filesystemtype not configured in the kernel.
我怎样才能让它发挥作用?是因为davfs是基于融合的吗?
答案 0 :(得分:0)
答案结果比我想象的要简单。我应该指出我还想删除密码提示。这就是我解决它的方法。
事实证明,mount.davfs是一个由mount命令执行的服务器。但它不是注册文件系统,因此您无法使用系统mount(2)调用。相反,我们必须直接执行mount命令。
要提供我自己的秘密文件,我就这样做了。
在/ etc / davfs2上挂载tmpfs(隐藏真正的davfs2.conf等)
mount("none", "/etc/davfs2/secrets", "tmpfs", 0, NULL);
创建包含我们秘密的/ etc / davfs2 / secrets模式0600
另外,我使用unshare来隐藏进程外部的mount。