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  
 
 
   
  OK STATION, Webmaster, Brian Lin