Linux下安装zlib-实现压缩功能

       zlib 程序库是著名的压缩引擎,zlib 也是著名的 gzip (GNU zip) 所采用的压缩引擎。

     如何安装zlib库?

    一、 首先安装zlib,从其官方网站下载最新的源程序,网址:http://www.gzip.org/zlib/。

      在然后将下载的文件解压释放到目录。解压后文件夹中自带了合适的makefile

      当使用make命令进行编译时,会要求先运行同一目录中的configure文件。

      打开configure文件我们可以发现是Shell Script,所以运行sudo sh configure来执行该脚本。


    二、 然后,通过查看makefiles文件,我们通过make命令编译该程序库,编译成功后(用root权限),通过make install来安装该库,也就是将头文件和lib文件自动放置到/usr/include和/usr/lib中。





      三、 安装完成后,就可以编写简单的压缩程序了,例如简单的示例如下:

#include <zlib.h>
#include <zconf.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>


int main(int argc,char **argv[])
{
    char msg[1000]="123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890\n";
    char buf[1000];
    char result[1000];
    unsigned long len, lenresult;

    printf("msg size:%d\n", sizeof(msg));
    len = 1000;
    compress(buf, &len, msg, sizeof(msg) );
    printf("buf size:%d\n", len);

    lenresult=1000;
    uncompress(result,&lenresult, buf, len );
    
    printf("result size:%d\n", lenresult);
    printf("result:%s\n", result);
    return 0;
}
运行后的结果为:

技术分享


其中函数


1、int compress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);

      compress函数将source缓冲区中的内容压缩到dest缓冲区。sourceLen表示source缓冲区的大小(以字节计)。注意函数的第二个参数destLen是传址调用。当调用函数时,destLen表示 dest 缓冲区的大小,destLen > (sourceLen + 12)*100.1%。当函数退出后,destLen表示压缩后缓冲区的实际大小。此时destLen / sourceLen正好是压缩率。

      compress若成功,则返回 Z_OK;若没有足够内存,则返回Z_MEM_ERROR;若输出缓冲区不够大,则返回Z_BUF_ERROR。


2、int uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);

      uncompress 函数将 source 缓冲区的内容解压缩到 dest 缓冲区。sourceLen 是 source 缓冲区的大小(以字节计)。注意函数的第二个参数 destLen 是传址调用。当调用函数时,destLen 表示 dest 缓冲区的大小, dest 缓冲区要足以容下解压后的数据。在进行解压缩时,需要提前知道被压缩的数据解压出来会有多大。这就要求在进行压缩之前,保存原始数据的大小(也就是解压后的数据的大小)。这不是 zlib 函数库的功能,需要我们做额外的工作。当函数退出后,destLen 是解压出来的数据的实际大小。

uncompress 若成功,则返回 Z_OK ;若没有足够内存,则返回 Z_MEM_ERROR;若输出缓冲区不够大,则返回Z_BUF_ERROR。若输入数据有误,则返回 Z_DATA_ERROR。



程序编译记得加上-lz ,制定库文件。

技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。