【开源项目】microtar 轻量级tar库

【开源项目】microtar 轻量级tar库

简介

microtar 是一个用 ANSI C 编写的轻量级 tar 库。该库由 microtar.c 和 microtar.h 两个文件组成。

LICENSE:MIT License

项目地址:

https://github.com/rxi/microtar

有时候在开发项目时需要将多个文件打包成一个文件,以便于传输或者存储等。如果开发的平台中没有相应的打包程序,这个时候就可以使用 microtar 这个 tar 库,它可以将多个文件打包成tar 格式的文件,也可以进行解包。tar 格式的文件传输到电脑上,可以直接用解压缩软件进行解包,十分方便。并且这个库十分的小巧,只有两个文件,可以直接放到现有项目中一起编译。对于资源紧张的嵌入式平台也可以使用。

使用

microtar 的使用十分简单,提供的接口如下:

int mtar_open(mtar_t *tar, const char *filename, const char *mode);
int mtar_close(mtar_t *tar);

int mtar_seek(mtar_t *tar, unsigned pos);
int mtar_rewind(mtar_t *tar);
int mtar_next(mtar_t *tar);
int mtar_find(mtar_t *tar, const char *name, mtar_header_t *h);
int mtar_read_header(mtar_t *tar, mtar_header_t *h);
int mtar_read_data(mtar_t *tar, void *ptr, unsigned size);

int mtar_write_header(mtar_t *tar, const mtar_header_t *h);
int mtar_write_file_header(mtar_t *tar, const char *name, unsigned size);
int mtar_write_dir_header(mtar_t *tar, const char *name);
int mtar_write_data(mtar_t *tar, const void *data, unsigned size);
int mtar_finalize(mtar_t *tar);

下面通过例程展示几个基本的操作。

打包

新建一个名为test.tar的 tar 文件,然后写入两个txt文件。

mtar_t tar;
const char *str1 = "Hello world";
const char *str2 = "Goodbye world";

/* 打开存档以进行写入操作 */
mtar_open(&tar, "test.tar", "w");

/* 写入一个文件,文件名为test1.txt, 文件长度为strlen(str1) */
mtar_write_file_header(&tar, "test1.txt", strlen(str1));
/* 将文件数据写入 */
mtar_write_data(&tar, str1, strlen(str1));
mtar_write_file_header(&tar, "test2.txt", strlen(str2));
mtar_write_data(&tar, str2, strlen(str2));

/* 完成操作 */
mtar_finalize(&tar);

/* 关闭 */
mtar_close(&tar);

查看

查看 tar 文件里有哪些文件。

mtar_t tar;
mtar_header_t h;

/* 打开存档以进行读取操作 */
mtar_open(&tar, "test.tar", "r");

/* 打印所有文件名和文件大小 */
while ( (mtar_read_header(&tar, &h)) != MTAR_ENULLRECORD ) {
    printf("%s (%d bytes)\n", h.name, h.size);
    mtar_next(&tar);
}

/* 关闭 */
mtar_close(&tar);

解包

从 tar 文件中读取文件。

mtar_t tar;
mtar_header_t h;
char *p;

/* 打开存档以进行读取操作 */
mtar_open(&tar, "test.tar", "r");

/* 读取并打印 test.txt 文件的内容 */
mtar_find(&tar, "test.txt", &h);
p = calloc(1, h.size + 1);
mtar_read_data(&tar, p, h.size);
printf("%s", p);
free(p);

/* Close archive */
mtar_close(&tar);

基本操作就这些了,其他详细的请查看该项目的README.md


本文链接:https://blog.csdn.net/u012028275/article/details/125694711

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值