【开源项目】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