青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

The power of C, the power of MD

A problem is a chance to do your best
posts - 11, comments - 22, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

使用libz和libbz2的API在項目中集成gzip和bzip2功能

Posted on 2010-07-30 12:22 roy 閱讀(3049) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

libz提供了一套與gzip有關的API,libbz2提供了一套與bzip2有關的API。我們可以利用其中幾個常用的函數(shù),在自己的項目中實現(xiàn)壓縮、解壓縮功能。這兩個庫文件一般在linux系統(tǒng)中都會有,如果沒有,可以分別到以下網址下載其源代碼:

 

gzip: http://www.gzip.org/

bzip2: http://www.bzip.org/index.html

 

libz最有用的函數(shù)有四個:

 

gzFile gzopen(const char *path, const char *mode);

int gzclose(gzFile file);

int gzread(gzFile file, void *buf, unsigned len);

int gzwrite(gzFile file, const void *buf, unsigned len);

 

追蹤其源代碼的話,可以發(fā)現(xiàn),gzFile也就是void *

 

libbz2最有用的函數(shù)也有四個:

 

BZFILE *BZ2_bzopen(const char *path, const char *mode);

void BZ2_bzclose(BZFILE *file);

int BZ2_bzread(BZFILE *file, void *buf, int len);

int BZ2_bzwrite(BZFILE *file, void *buf, int len);

 

追蹤其源代碼的話,可以發(fā)現(xiàn),BZFILE也就是void

 

所以說,libz的四個函數(shù)與libbz2的四個函數(shù),無論從名字上看,還是從參數(shù)上看,都是如出一轍的。只不過,gzopen()和gzread()可以打開和讀取任何文件,而BZ2_bzopen()和BZ2_bzread()只能打開和讀取bzip2壓縮的文件。

 

事實上,它們與普通文件的打開、關閉、讀取、寫入的四個函數(shù),基本上是對應的:

 

FILE *fopen(const char *path, const char *mode);

int fclose(FILE *fp);

int fread(void *buf, int size_of_element, int len, FILE *fp);

int fwrite(void *buf, int size_of_element, int len, FILE *fp);

 

要打開一個打算讀取的二進制文件,三個打開函數(shù)的調用分別是:

gzopen("filename", "r");

BZ2_bzopen("filename", "r");

fopen("filename", "rb");

 

要打開一個打算寫入的二進制文件,三個打開函數(shù)的調用分別是:

gzopen("filename", "w");

BZ2_bzopen("filename", "w");

fopen("filename", "w");

 

可以說參數(shù)的使用是基本一樣的,不過gzopen()和BZ2_bzopen()的mode參數(shù)一般沒有"rb"而只有"r",因為它們處理的基本上都是二進制文件,不需要特別指明。此外,mode參數(shù)還有其它用法,比如制定壓縮率等,具體可以查看源代碼。

 

不同的地方之一,F(xiàn)ILE是一個關于文件信息的結構體,而不是void類型,之二,gzread()、gzwrite()、BZ2_bzread()和BZ2_bzwrite()的參數(shù)位置與fread()和fwrite()不一樣,同時也省略了size_of_element參數(shù)。

 

有了這兩套API,我們就可以很方便地寫出程序對文件進行壓縮、解壓縮操作,更多的是,把壓縮、解壓縮功能集成到自己的項目中去,使得項目支持壓縮格式。舉例如下:

 

  1. 如果使用libz的API,壓縮就是對源文件進行fopen()/fread()/fclose()操作,對目標文件進行gzopen()/gzwrite()/gzclose()操作;解壓縮就是對源文件進行gzopen()/gzread()/gzclose()操作,對目標文件進行fopen()/fwrite()/fclose()操作
  2. 如果使用libbz2的API,壓縮就是對源文件進行fopen()/fread()/fclose()操作,對目標文件進行BZ2_bzopen()/BZ2_bzwrite()/BZ2_bzclose()操作;解壓縮就是對源文件進行BZ2_bzopen()/BZ2_bzread()/BZ2_bzclose()操作,對目標文件進行fopen()/fwrite()/fclose()操作

 

如果要直接使用libz和libbz2,很簡單,只需要做到三件事:

1.     include頭文件。把zlib.h和bzlib.h包含到項目源程序中

2.     鏈接庫文件。如果由于權限問題不能安裝庫文件,需要在編譯時指定庫文件的路徑

3.     如果庫文件沒有安裝在系統(tǒng)默認的搜索路徑,運行前還要修改LD_LIBRARY_PATH環(huán)境變量,使得運行時能夠找到庫文件

 

值得注意的是,以上列出的只是libz和libbz2里面最常用、比較高級的函數(shù),其實,這兩個庫文件里還有其它底層的函數(shù),利用這些底層函數(shù),甚至可以解壓.Z結尾的壓縮文件。具體做法就要慢慢參透libz的全部源代碼了。

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/yui/archive/2010/07/01/5707842.aspx

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一区二区三区久久精品| 麻豆精品传媒视频| 久久综合久久久| 久久成人免费日本黄色| 性欧美在线看片a免费观看| 亚洲欧美成人网| 欧美一区二区在线看| 久久精品夜色噜噜亚洲a∨| 久久精品中文字幕一区二区三区| 久久成人综合网| 欧美成人精品影院| 亚洲丰满在线| 中日韩男男gay无套| 在线亚洲+欧美+日本专区| 中文网丁香综合网| 亚洲欧美国产精品桃花| 久久久欧美精品sm网站| 欧美精品自拍偷拍动漫精品| 国产精品爱久久久久久久| 国产亚洲一二三区| 夜夜嗨av色综合久久久综合网| 亚洲免费综合| 免费不卡中文字幕视频| 中文国产成人精品久久一| 久久精品国产亚洲aⅴ| 欧美精品日韩精品| 国产一区深夜福利| 亚洲一区二区三区四区视频| 理论片一区二区在线| 一区二区三区精品久久久| 久久精品女人| 国产精品视频免费在线观看| 亚洲国产精品va在看黑人| 欧美一站二站| 亚洲精品永久免费| 欧美一区不卡| 国产精品福利网站| 亚洲精品欧美专区| 久久综合导航| 欧美亚洲在线播放| 国产精品欧美一区喷水| 一区二区欧美视频| 亚洲激情视频在线| 免费亚洲网站| 亚洲电影下载| 蜜臀av一级做a爰片久久| 欧美在线观看一区二区| 国产精品视频久久一区| 午夜精品久久久久久99热软件| 亚洲精品之草原avav久久| 麻豆精品网站| 亚洲黄色小视频| 日韩午夜黄色| 99精品视频一区| 久久不射网站| 亚洲欧洲在线免费| 久久9热精品视频| 国产精品美女久久久久av超清| 亚洲精品一品区二品区三品区| 久久一区二区三区国产精品 | 老色批av在线精品| 欧美一区影院| 国产综合精品| 免费成人在线视频网站| 久久综合精品国产一区二区三区| 国产日韩精品久久| 国产在线拍偷自揄拍精品| 欧美在线播放视频| 午夜亚洲福利在线老司机| 国产农村妇女精品| 久久九九免费| 老司机aⅴ在线精品导航| 91久久极品少妇xxxxⅹ软件| 蜜桃视频一区| 欧美激情一区二区三区全黄| 99re这里只有精品6| 一区二区三区成人精品| 国产精品一区二区a| 久久久久久免费| 免费成人高清| 亚洲欧美久久| 久久久久久久久久码影片| 亚洲国产精品一区二区第一页 | 中文在线不卡| 国产一区二区三区丝袜| 欧美第一黄色网| 欧美午夜女人视频在线| 久久成人精品电影| 久久偷窥视频| 亚洲一区精品视频| 久久久久久亚洲精品不卡4k岛国| 91久久精品网| 午夜免费电影一区在线观看| 1000部国产精品成人观看 | 免费看的黄色欧美网站| 在线一区二区三区四区| 午夜久久久久久| 日韩网站在线| 欧美中文字幕视频| 亚洲视频成人| 久久综合久久久| 亚洲免费在线| 美国十次成人| 久久成人综合网| 欧美日韩精品免费观看| 老司机午夜精品| 夜夜嗨av一区二区三区四季av| 影音先锋中文字幕一区二区| 国产精品a级| 宅男精品视频| 久久精品在线播放| 亚洲自拍偷拍视频| 免费观看一区| 久久狠狠久久综合桃花| 欧美日本韩国| 欧美肥婆在线| 伊人久久综合| 欧美伊人影院| 性欧美精品高清| 欧美另类一区| 免费欧美日韩| 极品尤物av久久免费看| 久久国产88| 亚洲午夜视频在线| 久久婷婷激情| 久久天堂成人| 久久男人av资源网站| 亚洲一区二区三区在线看| 欧美福利视频在线| 久热精品视频在线观看| 国产精品丝袜久久久久久app| 亚洲国产欧美日韩| 亚洲激情视频在线观看| 久久字幕精品一区| 欧美a级大片| 亚洲国产婷婷香蕉久久久久久99 | 久久女同精品一区二区| 国产欧美一区二区精品性| 国产精品99久久久久久宅男| 在线一区二区三区四区五区| 欧美日韩国产首页| 99精品视频一区| 亚洲欧美另类在线| 国产欧美日韩综合一区在线观看 | 亚洲成人原创| 久久夜色精品国产欧美乱极品| 久久久久在线观看| 伊人成年综合电影网| 免费观看在线综合色| 亚洲日韩欧美一区二区在线| 一区二区三区免费在线观看| 欧美三级第一页| 亚洲欧美视频一区二区三区| 久久国产精品毛片| 亚洲高清久久网| 欧美日韩在线视频首页| 亚洲欧美综合精品久久成人 | 亚洲一区二区免费视频| 国产精品久久久久一区| 欧美一级在线视频| 欧美激情aⅴ一区二区三区| 日韩亚洲欧美一区| 国产精品久久久久久av下载红粉| 亚洲欧美日韩一区二区三区在线观看| 久久夜色精品国产亚洲aⅴ| 亚洲黄网站在线观看| 欧美日韩一级黄| 欧美中文字幕在线播放| 亚洲国产精品va在看黑人| 亚洲一区欧美一区| 亚洲成人资源网| 国产精品jizz在线观看美国| 欧美亚洲综合网| 亚洲黄色免费| 久久国产毛片| 一区二区av在线| 国产日韩精品一区二区三区在线| 久久久久久久999| 亚洲天堂成人| 久久久久久97三级| 亚洲一本大道在线| 欧美视频在线观看一区二区| 午夜欧美大片免费观看| 亚洲人线精品午夜| 老司机一区二区| 欧美在线免费| 亚洲少妇自拍| 最新69国产成人精品视频免费 | 亚洲国产精品福利| 国产偷国产偷亚洲高清97cao | 久久精品亚洲精品| 一区二区三区四区五区视频| 麻豆91精品91久久久的内涵| 亚洲欧美三级伦理| 亚洲视频日本| 日韩视频亚洲视频| 亚洲人成人一区二区在线观看| 国产欧美日韩另类视频免费观看| 欧美日韩岛国| 欧美精品在线观看|