#tar-archive #tar #archive #tarball #archive-format

no-std tar-no-std

这是一个用于在no_std环境中以零分配读取Tar存档(由GNU Tar提供)的库。该库简单,仅支持读取“基本”存档,因此不提供扩展,如GNU Longname。支持的最大文件名长度为256个字符,不包括NULL字节(使用ustar的tar名称/前缀长名称实现)。支持的最大文件大小为8GiB。支持目录,但在迭代中只产生常规字段。

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解析器实现 中排名

Download history 211/week @ 2024-04-29 9/week @ 2024-05-06 2/week @ 2024-05-13 19/week @ 2024-05-20 33/week @ 2024-05-27 52/week @ 2024-06-03 23/week @ 2024-06-10 6/week @ 2024-06-17 13/week @ 2024-07-22 116/week @ 2024-07-29 64/week @ 2024-08-05 11/week @ 2024-08-12

每月204次下载

MIT 协议

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