gzip格式文件是一个数据压缩文件,文件大体上分为头部、数据部和尾部。
头部和尾部主要是一些文档属性和校验信息(rfc1952),数据部主要是用deflate方法压缩得到的数据。
zlib开源库使用的是deflate算法,因此,可以运用zlib库对gzip文件进行解压。
为便于gzip文件的读写,在zlib库中提供一组用于gzip读写的函数:
文件打开:
gzopen (const char *path, const char *mode);
path:文件路径
mode:可为"rb"或"wb"。
数据读取:
int gzread (gzFile file,voidp buf, unsigned len);
写入数据:
int gzwrite (gzFile file,const voidp buf, unsigned len);
写入数据:
int gzprintf (gzFile file,const char *format, ...);
与fprintf用法相同。
数据读取:
char * gzgets (gzFile file,char *buf, int len);
与fgets用法相同。
写入数据:
int gzputc (gzFile file, intc);
与fputc用法相同。
数据读取:
int gzgetc (gzFilefile);
与fgetc用法相同。
刷新缓冲区:
int gzflush (gzFile file, intflush);
与fflush作用相同。
数据寻址:
z_off_t gzseek (gzFile file,z_off_t offset, int whence);
不支持SEEK_END
如果文件是开启为"读取",则SEEK_SET及SEEK_CUR。
如果文件是开启为"写入",仅支援向前SEEK。
数据寻址:
int gzrewind (gzFilefile);
与gzseek(file, 0L, SEEK_SET)相同作用,仅在读取时有效。
返回当前位置:
z_off_t gztell (gzFilefile);
返回值 : 目前指针位置(解压缩后的位置)
是否在尾部:
int gzeof (gzFilefile);
返回值 : 1 - EOF, 0 - not EOF
关闭文件:
int gzclose (gzFilefile);
返回值 : zlib error number