码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2015-04-06 08:52:53      阅读:594      评论:0      收藏:0      [点我收藏+]

标签:linux   压缩   

       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 ,制定库文件。

技术分享

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

标签:linux   压缩   

原文地址:http://blog.csdn.net/liucimin/article/details/44892271

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!