How to decompress gzip files using zlib - a minimal example
zlib is a great library in use by hundreds of thousands of programs (including Python). However, it lacks documentation.
This minimal example shows you how to create a simple zcat
-like program that decompresses a gz
ipped input file and prints its contents to stdout.
/**
* zzcat.c -- Minimal gzip decompression example using zlib
* Written by Uli Köhler (techoverflow.net).
Not copyrighted -- provided to the public domain
*/
#include <stdio.h>
#include <zlib.h>
#define BUFSIZE 16384
/* compress or decompress from fin (command line argument) to stdout */
int main(int argc, char **argv)
{
if(argc <= 1) { // <= (number of expected CLI arguments)
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 using
g++ -o zzcat zzcat.c -lz
Usage example:
# Create test file
echo "foo" | gzip -c > test.txt.gz
# Uncompress using zzcat!
./zzcat test.txt.gz # This will print "foo"