zlib, gzcat

http://lists.freebsd.org/pipermail/freebsd-questions/ からダウンロードした 2009-May.txt.gz を、zlib を使った自作プログラムで伸長してみた。

#include <err.h>
#include <stdio.h>
#include <zlib.h>

int main(int argc, char **argv) {
    char buf[256];
    gzFile fp;

    if (argc < 2)
        return 1;
    fp = gzopen(argv[1], "rb");
    if (!fp)
        err(1, "gzopen");
    while (!gzeof(fp)) {
        gzgets(fp, buf, sizeof buf);
        printf("%s", buf);
    }
    gzclose(fp);

    return 0;
}


このプログラムを -lz を付けてコンパイルして、2009-May.txt.gz を読ませると、その md5 値は、

% ./program 2009-May.txt.gz | md5
925fdeca227d43369f075714e3211ed2


しかし、gzcat を使うと、

% gzcat 2009-May.txt.gz | md5
0ccec811ef9aed34dcc3a54a2cbb9e7d


なんでだろ。