gpt4 book ai didi

linux - 如何在 Rust 中创建虚拟文件系统?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:20 25 4
gpt4 key购买 nike

我正在开发一个应用程序,它应该通过网络安装一个文件夹。它应该显示为类似于 SMB 安装的文件夹,只是服务器不使用 SMB 协议(protocol)。它与此类似:服务器 A 是一个 HTTP 服务器,包含文件,客户端 B 应该能够挂载这些文件,以便能够直接访问它们而无需先下载它们(流式传输)。因此,客户端应该能够流式传输文件,即在任意位置访问文件。此外,存储在服务器 A 上的文件以特定方式进行编码、压缩、加密和打包,因此我需要在将它们呈现给虚拟文件系统之前对其进行解码(进行一些内部处理)。客户端应具有只读访问权限。我希望客户端在 Windows 和 Linux 上可用。它应该看起来像这样:

客户端挂载了一个文件夹,想要访问位于 1248989 位置的/virtualfolder/data.file。存储在服务器上的数据被分割成任意长度的 block (假设是 1 兆字节)。然后我需要下载与字节 1000000 - 1999999 对应的文件部分,对其进行解码,缓存它们,然后用户可以访问此数据。

当然,我的解码过程是在内部完成的,我只需要一个 API 来在操作系统上创建一个虚拟文件夹(或文件系统),它会显示文件的名称及其大小并允许用户访问它们。

它应该是这样的:[OS] <-虚拟文件系统 API-> [Client] <-some protocol-> [Server]

访问一个文件应该是这样的:

[OS] 我想从文件/vfs/somefile.tar 中获取字节 0-255

[客户端] 从服务器的文件/vfs/somefile.tar 中检索 block 0-999999。这对应于 block B5F997084DC8687。下载 B5F997084DC8687 并解码。

[Client] 这是 0-255 的/vfs/somefile.tar。

[OS] 我想从文件/vfs/somefile.tar 中获取字节 256-511

[Client] 这对应于 B5F997084DC8687。已下载并缓存此文件。

[客户端] 这是来自 256-511 的/vfs/somefile.tar。

我认为非常简单。是否有用于此类操作的简单 API?

最佳答案

Linux 和 MacOS 中最流行的虚拟文件系统实现是 FUSE。有一个 Rust crate 可以访问它:rust-fuse .

对于 Windows 有 Dokan FUSE声称与 FUSE API 兼容的包装器。您可以尝试使用该库构建 rust-fuse crate。

关于linux - 如何在 Rust 中创建虚拟文件系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40057303/

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