使用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
