#ext4 #no-std

no-std ext4-view

兼容 no-std 的 Rust 库,用于读取 ext4 文件系统

5 个不稳定版本

0.4.2 2024年8月8日
0.4.1 2024年7月31日
0.4.0 2024年7月30日
0.3.0 2024年7月3日
0.2.0 2024年6月27日

#140 in 文件系统

Download history 81/week @ 2024-06-21 137/week @ 2024-06-28 25/week @ 2024-07-05 1/week @ 2024-07-12 248/week @ 2024-07-26 139/week @ 2024-08-02 111/week @ 2024-08-09 24/week @ 2024-08-16

522 每月下载量

MIT/Apache

175KB
3K SLoC

ext4-view-rs

Crates.io Docs.rs codecov.io

此仓库提供了一个 Rust crate,允许以只读方式访问 ext4 文件系统。写访问不是目标。此 crate 是 no_std,因此可以在嵌入式环境中使用。但是,它需要 alloc

用法

添加依赖项

cargo add ext4-view

基本示例

use ext4_view::{Ext4, Metadata};

// Load the filesystem. The data source can be be anything that
// implements the `Ext4Read` trait. The simplest source is a
// `Vec<u8>` containing the whole filesystem.
let fs_data: Vec<u8> = get_fs_data_from_somewhere();
let fs = Ext4::load(Box::new(fs_data))?;

// If the `std` feature is enabled, you can load a filesystem by path:
let fs = Ext4::load_from_path(std::path::Path::new("some-fs.bin"))?;

// The `Ext4` type has methods very similar to `std::fs`:
let path = "/some/file/path";
let file_data: Vec<u8> = fs.read(path)?;
let file_str: String = fs.read_to_string(path)?;
let exists: bool = fs.exists(path)?;
let metadata: Metadata = fs.metadata(path)?;
for entry in fs.read_dir("/some/dir")? {
    let entry = entry?;
    println!("{}", entry.path().display());
}

设计目标

按重要性排序

  1. 正确
    • 所有有效的 ext4 文件系统都应可读。
    • 无效数据永远不会导致崩溃、恐慌或非终止循环。
    • 主包中无 unsafe 代码(它在依赖项中是允许的)。
    • 经过良好测试。
  2. 易于使用
    • API 应尽可能遵循 std::fs 的约定。
  3. 良好的性能
    • 性能不应以正确性或易用性为代价。

非目标

  • 写支持。
  • 损坏文件系统的恢复。

许可证

根据您的选择,许可协议为 Apache 许可证,版本 2.0MIT 许可证

贡献

请参阅 行为准则contributing.md

欢迎提交错误报告和 PR!

免责声明

本项目不是官方 Google 项目。Google 不支持此项目,并明确拒绝就其质量、适销性或特定用途适用性提供任何保证。

依赖项

~205KB