Linux程序设计入门 - zlib的运用(转)

Linux程序设计入门 - zlib的运用(转)[@more@]gzip(*.gz)档案格式几乎是Linux下的标准格式了,有人认为bzip2的压缩率比

gzip来得高。一般来说,这个说法大致正确,不过根据我个人的经验,有一半

以上的档案,bzip2没有比gzip的压缩率来得高,有少数状况下,gzip压缩率反

而比bzip2来的高。


zlib是个支援gzip档案格式的函数库,它使得gz档的存取就犹如开档关档一样

地容易,您可以很容易地为您的程序加入gz档的支援。



使用范例 : showgz.c


#include

#include

#include


void main(int argc,char **argv)

{

gzFile zip;

int c;


if (argc<2) return;


zip = gzopen(argv[1],"rb");

while ((c=gzgetc(zip))!=EOF) putchar(c);

gzclose(zip);

}


编译


gcc -o showgz showgz.c -lz


检验


gzip -9 < showgz.c > showgz.c.gz

./showgz showgz.c.gz


将会把这个程序内容显示出来,showgz的作用可说等於gzip -dc。



函数宣告


gzFile gzopen (const char *path, const char *mode);

开启一个gzip(*.gz)档。

mode叁数可为"rb"或"wb"。

另外也可包含压缩程度如"wb9"。

用'f'作为过滤资料,如"wb6f"。

用'h'可指定Huffman only压缩,如"wb1h"

gzopen亦可用於读取非压缩的gzip档案格式,在这种状况下,gzread会直接读

取,而不进行解压缩。




int gzread (gzFile file, voidp buf, unsigned len);

与read的用法相同。


int gzwrite (gzFile file, const voidp buf, unsigned len);

与write用法相同。


int gzprintf (gzFile file, const char *format, ...);

与fprintf用法相同。


char * gzgets (gzFile file, char *buf, int len);

与fgets用法相同。


int gzputc (gzFile file, int c);

与fputc用法相同。


int gzgetc (gzFile file);

与fgetc用法相同。


int gzflush (gzFile file, int flush);

与fflush作用相同。


z_off_t gzseek (gzFile file, z_off_t offset, int whence);

whence不支援SEEK_END

如果档案是开启为"读取",则SEEK_SET及SEEK_CUR,向前及向後均支援,不过

很慢就是了。

如果档案是开启为"写入",仅支援向前SEEK。


int gzrewind (gzFile file);

与gzseek(file, 0L, SEEK_SET)相同作用,仅在读取时有效。


z_off_t gztell (gzFile file);

返回值 : 目前档案位置(解压缩後的位置)


int gzeof (gzFile file);

返回值 : 1 - EOF, 0 - not EOF


int gzclose (gzFile file);

关闭档案

返回值 : zlib error number



OK STATION, Webmaster, Brian Lin

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10617542/viewspace-947587/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10617542/viewspace-947587/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值