2 个版本
0.1.1 | 2023 年 7 月 4 日 |
---|---|
0.1.0 | 2023 年 6 月 30 日 |
0.0.4-beta |
|
#442 in 文件系统
140KB
2.5K SLoC
Ext2.rs
本 crate 的目的是能够在块设备或简单磁盘映像文件形式上读取和写入 ext2 分区。
它不需要任何 Unix 内核模块即可运行。最初,它被设计为在不需要特权模式的 Docker 容器内打开 ext2 映像。
本 crate 覆盖了基本系统调用
- open : 打开文件。
- read_dir : 返回目录内的条目向量。
- create_dir : 在提供的路径处创建一个新的空目录。
- remove_dir : 删除一个空目录。
- chmod : 更改指定文件的文件权限位。
- chown : 将路径处的文件的所有权更改为指定的所有者(用户)和组。
- stat : 此函数返回有关文件的信息。
- remove_file : 从文件系统中删除文件。
- utime : 更改文件的访问和修改时间。
- rename : 将文件或目录重命名为新名称,如果目标已存在,则不能替换原始文件。
- link : 为文件创建新名称。这也称为“硬链接”。
- symlink : 为文件创建新名称。这称为符号链接。
此外,crate 还实现了自己的 OpenOptions。
您对文件拥有完全权限,并且所有指定的路径必须是绝对路径。目前,此 crate 只在类 Unix 操作系统上运行。
免责声明: 此 crate 处于早期阶段,应谨慎用于现有系统分区。
此模块包含 ext2 驱动,请参阅 osdev
未来路线图
- 修复一些不一致性
- 使用 std::io::Error 代替 IOError
- 使用 ErrorKind 代替 errno
- 在其他平台(非 UNIX)上编译
- 无 std
- 目录条目缓存
- 更改当前目录
- 设置权限
入门指南
将以下依赖项添加到您的Cargo清单中...
[dependencies]
ext2 = "0.1"
# or
ext2 = { version = "0.1" }
示例
首先,创建一个名为'disk.img'的新ext2磁盘镜像
dd if=/dev/zero of=disk.img bs=1024 count=1024
mkfs.ext2 disk.img
打开磁盘镜像,并将其写入'/foo.raw'文件
use ext2;
let f = std::fs::OpenOptions::new() // OpenOptions from std
.read(true)
.write(true)
.open("disk.img")
.expect("open filesystem failed");
let ext2 = ext2::Ext2::new(f).unwrap();
let mut f = ext2::OpenOptions::new() // OpenOptions from ext2
.write(true)
.create(true)
.open("/foo.raw", ext2)
.unwrap();
let b: Box<[u8; 1024 * 128]> = Box::new([42; 1024 * 128]);
let size = f.write(&*b).unwrap(); // write the box content to file
许可证
根据以下任一项获得许可
- Apache许可证第2版,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确表示,否则根据Apache-2.0许可证定义的,您有意提交以供包含在作品中的任何贡献,都将根据上述方式双重许可,没有任何额外条款或条件。
依赖项
~1.5MB
~36K SLoC