#fs #filesystem #memory #test

rsfs-tokio

一个具有磁盘和内存实现的通用文件系统

1 个不稳定版本

0.5.0 2023年5月16日

#473测试

Download history 124/week @ 2024-03-24 49/week @ 2024-03-31 29/week @ 2024-04-07 24/week @ 2024-04-14 80/week @ 2024-04-21 38/week @ 2024-04-28 29/week @ 2024-05-05 15/week @ 2024-05-12 17/week @ 2024-05-19 26/week @ 2024-05-26 21/week @ 2024-06-02 17/week @ 2024-06-09 100/week @ 2024-06-16 48/week @ 2024-06-23 33/week @ 2024-06-30 24/week @ 2024-07-07

206 每月下载
6 个工具包中使用(通过 floppy-disk

MIT 许可证

245KB
4.5K SLoC

rsfs

Build Status Crates.io Documentation

此工具包提供了一个具有磁盘和内存实现的通用文件系统。

将来,将提供一个模块,允许在内存文件系统上的测试中注入错误。这曾经存在,但在提交 1ee34f6 中被移除。

此工具包目前尤其有用,因为它提供了一个可靠的内存文件系统。将来,它将在单元测试中触发文件系统错误方面更有用,以使您能够测试代码如何处理文件系统错误。

有关用法和用法示例的更多信息,请参阅工具包 文档


lib.rs:

一个具有磁盘和内存实现的通用文件系统。

存在的理由

std::fs 模块提供了操作文件系统的函数,这些函数很好。但是,如果您有使用 std::fs 的代码,则很难确保您的代码正确处理错误,因为通常您不是在已损坏的机器上测试。您可以尝试设置 FUSE,虽然可行,但很复杂。

此工具包提供了一个具有各种实现的通用文件系统。目前,仅提供普通(不可注入)的磁盘和内存实现。将来,将提供一个围绕内存文件系统的错误注入封装,以帮助在单元测试中触发文件系统错误。

这个crate的目的是让你在代码中使用std::fs的地方使用通用的rsfs::GenFS。你的main.rs可以使用rsfs::disk::FS来获得默认的磁盘行为,而你的测试使用rsfs::mem::test::FS(一旦存在)来获取一个可以注入错误的内存文件系统。

内存文件系统

在我编写这个crate的时候,还没有完整的内存文件系统;rsfs::mem中的实现应该能满足大多数需求。

rsfs::mem是一个平台特定的模块,根据构建器的平台使用适当的模块。为了获得一个平台无关的模块,你需要使用你想要的内存平台。因此,如果你使用rsfs::mem::unix,你将得到一个遵循Unix语法的内存系统。如果你使用rsfs::mem::windows,你将得到一个遵循Windows语法的内存系统(然而,你必须首先编写该模块)。

这意味着rsfs::mem旨在基本上是std::fs的内存替代品,并强迫你以跨平台的方式编写代码。rsfs::mem::unix旨在成为一个特定于Unix的替代品,在所有平台上为你提供Unix语义。

注意事项

当前的内存文件系统仅实现了Unix。这意味着唯一的跨平台内存文件系统是特定的rsfs::mem::unix。Windows用户可以通过实现Windows的内存类似物来提供帮助。

内存文件系统使用了一些不安全的代码。在通过Arc/RwLock与文件系统中的递归数据结构一起工作很长时间后,我认为这是必要的。代码经过了相当充分的测试;应该没有问题。在我看来,不安全的用法使得代码更加清晰,但这确实需要在某些函数中特别小心。

文档致谢

这个crate复制了目前存在于std::fs中的许多文档和示例。这不仅使得人们更容易直接迁移到这个crate,而且使这个crate更容易理解。这个crate在其仓库中包含了Rust的MIT许可证,以供进一步的归因目的。

依赖关系

~4–11MB
~112K SLoC