| Linux程序设计入门 - zlib的运用 |
|
| |
|
gzip(*.gz)档案格式几乎是Linux下的标准格式了,有人认为bzip2的压缩率比 gzip来得高。一般来说,这个说法大致正确,不过根据我个人的经验,有一半 以上的档案,bzip2没有比gzip的压缩率来得高,有少数状况下,gzip压缩率反 而比bzip2来的高。 zlib是个支援gzip档案格式的函数库,它使得gz档的存取就犹如开档关档一样 地容易,您可以很容易地为您的程序加入gz档的支援。 使用范例 : showgz.c #include <stdio.h> #include <stdlib.h> #include <zlib.h> 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 Linux联盟收集整理
 |
频道声明:本频道的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出出处和原始作者 文章版权归本频道与文章作者所有.对于被频道转载文章的个人和网站,我们表示深深的谢意。
| 原始作者:佚名 |
录入时间:2007-1-2 3:22:22 |
| 信息来源:不详 |
投稿信箱:itqoo@126.com |
|
|
 |
|
|
|
| 教程录入:itqoo 责任编辑:itqoo |
|
上一个教程: Linux程序设计入门 - termios/keymap/terminal programming
下一个教程: Perl CGI 编程常见问题 |
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |