【问题标题】:Fuse Filesystem to communicate with FTPFuse Filesystem 与 FTP 通信
【发布时间】:2020-09-17 05:36:46
【问题描述】:

我正在做一个项目,用 C 语言创建一个与 FTP 服务器通信的 fuse 文件系统(只读取文件不写入)。我已经实现了 getattr、read 和 readdir fuse 函数,并且还通过假设它在函数中作为参数接收到的路径是 FTP 服务器的 URL 来添加 libcurl 功能。但我不明白如何在命令行中传递 ftp 服务器的 URL,以便从 main 函数调用 fuse_main() 函数,并将 URL 作为路径参数传递给这些 fuse 函数。

【问题讨论】:

    标签: ftp filesystems fuse


    【解决方案1】:

    最简单的方法是将这个参数解析为程序main 函数的参数的一部分,然后将其交给熔断函数。您甚至可以将其保留为静态全局变量,因为它可能不应该更改。从 libfuse 示例中查看基本的“hello”示例是如何完成的:

    https://github.com/libfuse/libfuse/blob/master/example/hello.c#L45

    【讨论】:

    • 感谢您的回复。我之前已经浏览过代码,但我仍然怀疑的一件事是我应该在 fuse_main() 中传递什么参数。假设在命令行中,我传递了 ./a.out localhost:21 挂载点(假设 localhost:21 是 FTP 服务器的地址),那么我应该在 fuse_main() 中传递什么(argv[1] -- FTP 服务器的地址, argv[2] -- 挂载点)
    • 这不是你明确要做的。您应该定义一个optionsoption_spec 结构并将它们传递给fuse_opt_parse,就像在hello.c 中所做的那样。此函数将为您解析 args。
    • 非常感谢。我知道我需要将 FTP 服务器的 URL 存储在 options 结构中并将它们传递给 fuse_opt_parse。我不明白的是 getattr、readdir 和 read 函数中的路径争论会发生什么?那是挂载点的路径还是别的什么。
    • 我鼓励您修改 libfuse 的一个示例,使用各种打印方式来了解其工作原理。 path 参数始终保存用户在安装路径内部 访问的位置,跳过安装路径本身(被视为根“/”)。如果挂载路径为/tmp/myfuse,“stat /tmp/myfuse/1.txt”将导致getattr路径为“1.txt”
    猜你喜欢
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多