如何从应用程序中挂载davfs?

时间:2017-01-10 02:45:39

标签: c linux webdav

我有一个远程文件系统,我可以通过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是基于融合的吗?

1 个答案:

答案 0 :(得分:0)

答案结果比我想象的要简单。我应该指出我还想删除密码提示。这就是我解决它的方法。

事实证明,mount.davfs是一个由mount命令执行的服务器。但它不是注册文件系统,因此您无法使用系统mount(2)调用。相反,我们必须直接执行mount命令。

要提供我自己的秘密文件,我就这样做了。

  1. 在/ etc / davfs2上挂载tmpfs(隐藏真正的davfs2.conf等)

    mount("none", "/etc/davfs2/secrets", "tmpfs", 0, NULL);

  2. 创建包含我们秘密的/ etc / davfs2 / secrets模式0600

  3. 运行mount -t davfs url / yourpath(即fork + exec mount命令)
  4. 通过在/ yourpath
  5. 中读取和写入文件来使用webdav
  6. unmount / yourpath
  7. 卸载/ etc / davfs2
  8. 完成后退出程序。
  9. 另外,我使用unshare来隐藏进程外部的mount。