gzip-Dateien mit zlib dekomprimieren – ein minimales Beispiel

English Deutsch

zlib ist eine hervorragende Bibliothek, die von hunderttausenden Programmen (inklusive Python) verwendet wird. Allerdings fehlt es ihr an Dokumentation.

Dieses minimale Beispiel zeigt Ihnen, wie Sie ein einfaches zcat-ähnliches Programm erstellen, das eine gzip-komprimierte Eingabedatei dekomprimiert und ihren Inhalt auf stdout ausgibt.

zzcat.c
/**
 * zzcat.c -- Minimales gzip-Dekompressionsbeispiel mit zlib
 * Geschrieben von Uli Köhler (techoverflow.net).
   Nicht urheberrechtlich geschützt -- der Public Domain übergeben
 */
#include <stdio.h>
#include <zlib.h>

#define BUFSIZE 16384

/* komprimieren oder dekomprimieren von fin (Befehlszeilenargument) nach stdout */
int main(int argc, char **argv)
{
    if(argc <= 1) { // <= (Anzahl der erwarteten CLI-Argumente)
        fprintf(stderr, "Verwendung: %s <Eingabedatei>\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;
}

Kompilieren mit

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

Verwendungsbeispiel:

zzcat_usage_example.sh
# Testdatei erstellen
echo "foo" | gzip -c > test.txt.gz
# Mit zzcat dekomprimieren!
./zzcat test.txt.gz # Dies gibt "foo" aus

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