gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:36:34 25 4
gpt4 key购买 nike

我有一个远程文件系统,我可以通过 webdav 挂载

sudo mount -t davfs https://myserver.com /tmp/dav

此时它提示我输入用户名和密码。

然后我向 fstab 添加了一个条目并创建了一个 ~/.davfs2/secrets 文件。如果我现在运行

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 打印“没有这样的设备”。

挂载手册页显示:

ENODEV filesystemtype not configured in the kernel.

我怎样才能让它发挥作用?是因为 davfs 是基于 fuse 的吗?

最佳答案

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

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

为了提供我自己的 secret 文件,我这样做了。

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

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

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

  3. 运行 mount -t davfs url/yourpath(即 fork+exec mount 命令)
  4. 通过读取和写入/yourpath 中的文件来使用 webdav
  5. 卸载/你的路径
  6. 卸载/etc/davfs2
  7. 完成后退出程序。

此外,我使用 unshare 从进程外部隐藏挂载。

关于c - 如何从应用程序中挂载 davfs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41560315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com