如何使用 zlib 解压 gzip 文件 - 最小示例

zlib 是一个被数十万程序(包括 Python)使用的优秀库。但是,它缺乏文档。

此最小示例展示如何创建一个简单的类似 zcat 的程序,解压 gz 压缩的输入文件并将其内容打印到 stdout。

zzcat.c
/**
 * zzcat.c -- 使用 zlib 的最小 gzip 解压示例
 * 由 Uli Köhler (techoverflow.net) 编写。
   无版权 -- 提供给公共领域
 */
#include <stdio.h>
#include <zlib.h>

#define BUFSIZE 16384

/* 从 fin(命令行参数)压缩或解压到 stdout */
int main(int argc, char **argv)
{
    if(argc <= 1) { // <= (期望的 CLI 参数数量)
        fprintf(stderr, "Usage: %s <input file>\n", argv[0]);
        return -1;
    }

    gzFile fin = gzopen(argv[1], "rb");

    char buf[BUFSIZE];
    int n;

    while((n = gzread(fin, buf, BUFSIZE)) > 0) {
        fwrite(buf, 1, n, stdout);
    }

    return 0;
}

使用以下命令编译

compile_zzcat.sh
g++ -o zzcat zzcat.c -lz

用法示例:

zzcat_usage_example.sh
# 创建测试文件
echo "foo" | gzip -c > test.txt.gz
# 使用 zzcat 解压!
./zzcat test.txt.gz # 这将打印 "foo"

Check out similar posts by category: C/C++