11个版本
0.3.2 | 2024年8月2日 |
---|---|
0.3.1 | 2024年5月3日 |
0.2.0 | 2023年4月11日 |
0.1.8 | 2022年5月2日 |
0.1.6 | 2021年10月11日 |
348 在 解析器实现 中排名
每月204次下载
60KB
875 行
tar-no-std
- 解析 Tar存档(Tar包)
由于历史原因,Tar存档有几种格式。它们都基于相同的原则,但有一些细微的差异,这通常使它们互不兼容。 (参考)
这是一个用于在no_std
环境中以零分配读取Tar存档的库。如果您有标准环境并且需要完整功能支持,我建议使用https://crates.io/crates/tar。
限制
该库简单,专注于从Tar存档中读取文件及其内容。支持历史基本Tar和ustar格式。其他格式可能也能工作,但可能不支持所有功能。不支持的GNU扩展包括稀疏文件、增量存档和长文件名扩展。
支持的最大文件名长度为256个字符,不包括NULL字节(使用ustar的tar名称/前缀长名称实现)。支持的最大文件大小为8GiB。支持目录,但在迭代中只产生常规字段。路径反映在其文件名中。
用例
如果您编写的是内核或类似低级应用程序,需要从存档中获取“大量文件”(例如“初始化ramdisk”),则此库很有用。例如,Tar文件可以是引导加载程序提供的Multiboot2引导模块。
示例
use tar_no_std::TarArchiveRef;
fn main() {
// init a logger (optional)
std::env::set_var("RUST_LOG", "trace");
env_logger::init();
// also works in no_std environment (except the println!, of course)
let archive = include_bytes!("../tests/gnu_tar_default.tar");
let archive = TarArchiveRef::new(archive).unwrap();
// Vec needs an allocator of course, but the library itself doesn't need one
let entries = archive.entries().collect::<Vec<_>>();
println!("{:#?}", entries);
}
Cargo功能
此库允许使用额外的Cargo构建时间功能alloc
。当此功能激活时,库还提供TarArchive
类型,它拥有堆上的数据。不稳定的特性提供了仅在nightly通道上可用的额外便利。
压缩 (tar.gz
)
如果您的 Tar 文件被压缩,例如通过 .tar.gz
/gzip
,您需要先解压缩字节(例如通过一个 gzip 库)。然后,这个 crate 可以从解压缩的字节中读取 Tar 归档格式。
MSRV
MSRV 是 1.76.0 稳定版。
依赖项
~330–590KB
~10K SLoC