gzip
NinGoo's blog

使用zlib输出gzip格式的文件

zlib是一个比较通用的压缩库,通过在程序中引入zlib,可以方便的对数据进行压缩。今天花了点时间研究了一下,在tbuldr中实现了直接将数据库中的数据导出为gzip文件的功能。

下载zlib源代码,对于Linux,可以编译成静态库,然后将zlib.h,libz.a(如有必要,再加上zonf.h)和程序代码放置到同一个目录,编译的时候包含libz.a即可。

#./configure
#make
#make install

如果要编译成动态库,则只需要第一步改成./configure -s即可。

废话少说,下面是一段演示代码,非常简单:

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

int main()
{
  char *data = "this is a gzip test from NinGoo.net";
  gzFile *fp=NULL;
  fp=gzopen("test_out.gz","wb");
  gzwrite(fp,data,strlen(data));
  gzclose(fp);
}

编译:

gcc -o test test.c libz.a

执行:

$./test
$gzip -d test_out.gz
$more test_out
this is a gzip test from NinGoo.net

tbuldr中,只需要在file参数指定的文件名后面加上.gz,就会自动输出为gzip格式的文件。至此,tbuldr已基本实现了sqluldr2的全部功能,性能测试结果也不相上下了。

另外,zlib也可以在内存中对数据进行压缩和解压缩,参考:
http://hispider.googlecode.com/svn/trunk/devel/hispider/src/utils/zstream.c