如何从应用程序中挂载 davfs?
How can I mount davfs from within application?
我有一个远程文件系统,我可以通过 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");
挂载 returns 结果 -1 并且 errno 设置为 19:strerror 打印 "no such device".
挂载手册页显示:
ENODEV filesystemtype not configured in the kernel.
我怎样才能让它工作?是因为davfs是基于fuse的吗?
答案比我想象的要简单。我应该指出我还想删除密码提示。我就是这样解决的。
原来[=44=]是一个由mount命令执行的服务器。但它不是已注册的文件系统,因此您不能使用系统 mount(2) 调用。相反,我们必须直接执行 mount 命令。
为了提供我自己的机密文件,我这样做了。
在 /etc/davfs2 挂载 tmpfs(隐藏真正的 davfs2.conf 等)
mount("none", "/etc/davfs2/secrets", "tmpfs", 0, NULL);
创建 /etc/davfs2/secrets 模式 0600 包含我们的秘密
- 运行 mount -t davfs url /你的路径(即 fork+exec 挂载命令)
- 通过在 /yourpath 中读取和写入文件来使用 webdav
- 卸载/你的路径
- 卸载/etc/davfs2
- 完成后退出程序。
此外,我使用 unshare 从进程外部隐藏挂载。
我有一个远程文件系统,我可以通过 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");
挂载 returns 结果 -1 并且 errno 设置为 19:strerror 打印 "no such device".
挂载手册页显示:
ENODEV filesystemtype not configured in the kernel.
我怎样才能让它工作?是因为davfs是基于fuse的吗?
答案比我想象的要简单。我应该指出我还想删除密码提示。我就是这样解决的。
原来[=44=]是一个由mount命令执行的服务器。但它不是已注册的文件系统,因此您不能使用系统 mount(2) 调用。相反,我们必须直接执行 mount 命令。
为了提供我自己的机密文件,我这样做了。
在 /etc/davfs2 挂载 tmpfs(隐藏真正的 davfs2.conf 等)
mount("none", "/etc/davfs2/secrets", "tmpfs", 0, NULL);
创建 /etc/davfs2/secrets 模式 0600 包含我们的秘密
- 运行 mount -t davfs url /你的路径(即 fork+exec 挂载命令)
- 通过在 /yourpath 中读取和写入文件来使用 webdav
- 卸载/你的路径
- 卸载/etc/davfs2
- 完成后退出程序。
此外,我使用 unshare 从进程外部隐藏挂载。