#userspace #file #space #user #ext4 #read-file

ext4fs

Rust 实现的用于用户空间的 ext4 文件系统

1 个不稳定版本

0.1.0 2024 年 1 月 16 日

#879 in 文件系统

Apache-2.0

49KB
1K SLoC

crates.io docs.rs

ext4fs-rs

ext4fs-rs 是 Rust 实现的用于用户空间的 ext4 文件系统。ext4 文件系统可以直接读取,无需挂载,目前不支持写操作。欢迎您的贡献。

⚠️⚠️⚠️ 当前 API 不稳定,可能将来会修改,还需要添加更多测试和文档。

示例

  • 新建文件系统
// Read a raw ext4 image file.
let file = std::fs::File::open("testdata/test.ext4").unwrap();
let reader = BufReader::new(file);
let mut fs = ext4fs::FileSystem::from_reader(reader).unwrap();
  • 遍历目录
let rd = fs.read_dir("/dir1").unwrap();
for x in rd {
    println!("{}", x.unwrap().get_name_str());
}
  • 获取文件信息
let m = fs.metadata("/hello.txt").unwrap();
println!(
    "uid={} gid={} permissions={:o} len={} created={:?} accessed={:?} modified={:?}",
    m.uid(),
    m.gid(),
    m.permissions(),
    m.len(),
    m.created(),
    m.accessed(),
    m.modified(),
);
  • 读取符号链接
let p = fs.read_link("/hello.txt.lnk").unwrap();
println!("{}", p.to_str().unwrap());
  • 读取文件全部内容
let b = fs.read("/hello.txt").unwrap();
assert_eq!("hello\n", String::from_utf8_lossy(&b).to_string());
  • 按需读取文件
let mut f = fs.open("/hello.txt").unwrap();
f.seek(std::io::SeekFrom::Start(2)).unwrap();
let mut buf = String::new();
f.read_to_string(&mut buf).unwrap();

依赖

~0.8–1.4MB
~32K SLoC