一、什么是zlib?
zlib是提供数据压缩用的函式库,由Jean-loup Gailly与Mark Adler所开发,初版0.9版在1995年5月1日发表。zlib使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用。此函式库为自由软件,使用zlib授权。截至2007年3月,zlib是包含在Coverity的美国国土安全部赞助者选择继续审查的开源项目。
安装步骤:
1、下载好压缩文件zlib-1.2.8.tar.gz
2、解压我们下载好的zlib-1.2.8.tar.gz压缩文件到你想安装的目录
命令 : mkdir -p /home/LLG/zlib (-p选项是创建多级目录)
进入目录:cd /home/LLG/zlib
把压缩包解压到我们的/home/LLG/zlib目录:
命令:tar -zxvf zlib-1.2.8.tar.gz
3、解压好了生成目录,我们进入zlib-1.2.8目录
命令:cd zlib-1.2.8
命令:sudo vim ./etc/ld.so.conf.d/zlib.conf (我这里不是管理员模式,所以用sudo暂时使用管理员给的相关权限修改配置文件)
在打开的文件中加入:
/home/LLG/zlib/lib (注意:/home/LLG/zlib我的安装目录,每个人的不一样,记住一定要是绝对路径)
保存退出!
6、加载配置好的文件
命令: sudo ldconfig
7、使用zlib库的时候记得加入 -lz 参数
例如: gcc example.c -lz
配置完成,下面用我们安装好的zlib库看一个小例子:
#include
#include
int main()
{
/* 原始数据 */
unsigned char strSrc[] = "hello world! aaaaa bbbbb ccccc ddddd 中文测试 yes";
unsigned char buf[1024] = {0};
unsigned char strDst[1024] = {0};
unsigned long srcLen = sizeof(strSrc);
unsigned long bufLen = sizeof(buf);
unsigned long dstLen = sizeof(strDst);
printf("Src string:%s\nLength:%ld\n", strSrc, srcLen);
/* 压缩 */
compress(buf, &bufLen, strSrc, srcLen);
printf("After Compressed Length:%ld\n", bufLen);
/* 解压缩 */
uncompress(strDst, &dstLen, buf, bufLen);
printf("After UnCompressed Length:%ld\n",dstLen);
printf("UnCompressed String:%s\n",strDst);
return 0;
}
dest:压缩后数据保存的目标缓冲区
destLen:目标缓冲区的大小(必须在调用前设置,并且它是一个指针)
source:要压缩的数据
sourceLen:要压缩的数据长度
compress()函数成功返回Z_OK,如果内存不够,返回Z_MEM_ERROR,如果目标缓冲区太小,返回Z_BUF_ERROR
2、解压缩函数: int uncompress(unsigned char * dest, unsigned long * destLen, unsigned char * source, unsigned long sourceLen);
dest:解压后数据保存的目标缓冲区
destLen:目标缓冲区的大小(必须在调用前设置,并且它是一个指针)
source:要解压的数据
sourceLen:要解压的数据长度
uncompress()函数成功返回Z_OK,如果内存不够,返回Z_MEM_ERROR,如果目标缓冲区太小,返回Z_BUF_ERROR,如果要解压的数据损坏或不完整,返回Z_DATA_ERROR。
结果图:
可以看到这里只压缩了一个字节。