Linux程式設計入門 - zlib的運用(轉)
Linux程式設計入門 - zlib的運用(轉)[@more@]gzip(*.gz)檔案格式幾乎是Linux下的標準格式了,有人認為bzip2的壓縮率比
gzip來得高。一般來說,這個說法大致正確,不過根據我個人的經驗,有一半
以上的檔案,bzip2沒有比gzip的壓縮率來得高,有少數狀況下,gzip壓縮率反
而比bzip2來的高。
zlib是個支援gzip檔案格式的函式庫,它使得gz檔的存取就猶如開檔關檔一樣
地容易,您可以很容易地為您的程式加入gz檔的支援。
使用範例 : showgz.c
#include
#include
#include
void main(int argc,char **argv)
{
gzFile zip;
int c;
if (argc<2) return;
zip = gzopen(argv[1],"rb");
while ((c=gzgetc(zip))!=EOF) putchar(c);
gzclose(zip);
}
編譯
gcc -o showgz showgz.c -lz
檢驗
gzip -9 < showgz.c > showgz.c.gz
./showgz showgz.c.gz
將會把這個程式內容顯示出來,showgz的作用可說等於gzip -dc。
函式宣告
gzFile gzopen (const char *path, const char *mode);
開啟一個gzip(*.gz)檔。
mode叄數可為"rb"或"wb"。
另外也可包含壓縮程度如"wb9"。
用'f'作為過濾資料,如"wb6f"。
用'h'可指定Huffman only壓縮,如"wb1h"
gzopen亦可用於讀取非壓縮的gzip檔案格式,在這種狀況下,gzread會直接讀
取,而不進行解壓縮。
int gzread (gzFile file, voidp buf, unsigned len);
與read的用法相同。
int gzwrite (gzFile file, const voidp buf, unsigned len);
與write用法相同。
int gzprintf (gzFile file, const char *format, ...);
與fprintf用法相同。
char * gzgets (gzFile file, char *buf, int len);
與fgets用法相同。
int gzputc (gzFile file, int c);
與fputc用法相同。
int gzgetc (gzFile file);
與fgetc用法相同。
int gzflush (gzFile file, int flush);
與fflush作用相同。
z_off_t gzseek (gzFile file, z_off_t offset, int whence);
whence不支援SEEK_END
如果檔案是開啟為"讀取",則SEEK_SET及SEEK_CUR,向前及向後均支援,不過
很慢就是了。
如果檔案是開啟為"寫入",僅支援向前SEEK。
int gzrewind (gzFile file);
與gzseek(file, 0L, SEEK_SET)相同作用,僅在讀取時有效。
z_off_t gztell (gzFile file);
返回值 : 目前檔案位置(解壓縮後的位置)
int gzeof (gzFile file);
返回值 : 1 - EOF, 0 - not EOF
int gzclose (gzFile file);
關閉檔案
返回值 : zlib error number
OK STATION, Webmaster, Brian Lin
gzip來得高。一般來說,這個說法大致正確,不過根據我個人的經驗,有一半
以上的檔案,bzip2沒有比gzip的壓縮率來得高,有少數狀況下,gzip壓縮率反
而比bzip2來的高。
zlib是個支援gzip檔案格式的函式庫,它使得gz檔的存取就猶如開檔關檔一樣
地容易,您可以很容易地為您的程式加入gz檔的支援。
使用範例 : showgz.c
#include
#include
#include
void main(int argc,char **argv)
{
gzFile zip;
int c;
if (argc<2) return;
zip = gzopen(argv[1],"rb");
while ((c=gzgetc(zip))!=EOF) putchar(c);
gzclose(zip);
}
編譯
gcc -o showgz showgz.c -lz
檢驗
gzip -9 < showgz.c > showgz.c.gz
./showgz showgz.c.gz
將會把這個程式內容顯示出來,showgz的作用可說等於gzip -dc。
函式宣告
gzFile gzopen (const char *path, const char *mode);
開啟一個gzip(*.gz)檔。
mode叄數可為"rb"或"wb"。
另外也可包含壓縮程度如"wb9"。
用'f'作為過濾資料,如"wb6f"。
用'h'可指定Huffman only壓縮,如"wb1h"
gzopen亦可用於讀取非壓縮的gzip檔案格式,在這種狀況下,gzread會直接讀
取,而不進行解壓縮。
int gzread (gzFile file, voidp buf, unsigned len);
與read的用法相同。
int gzwrite (gzFile file, const voidp buf, unsigned len);
與write用法相同。
int gzprintf (gzFile file, const char *format, ...);
與fprintf用法相同。
char * gzgets (gzFile file, char *buf, int len);
與fgets用法相同。
int gzputc (gzFile file, int c);
與fputc用法相同。
int gzgetc (gzFile file);
與fgetc用法相同。
int gzflush (gzFile file, int flush);
與fflush作用相同。
z_off_t gzseek (gzFile file, z_off_t offset, int whence);
whence不支援SEEK_END
如果檔案是開啟為"讀取",則SEEK_SET及SEEK_CUR,向前及向後均支援,不過
很慢就是了。
如果檔案是開啟為"寫入",僅支援向前SEEK。
int gzrewind (gzFile file);
與gzseek(file, 0L, SEEK_SET)相同作用,僅在讀取時有效。
z_off_t gztell (gzFile file);
返回值 : 目前檔案位置(解壓縮後的位置)
int gzeof (gzFile file);
返回值 : 1 - EOF, 0 - not EOF
int gzclose (gzFile file);
關閉檔案
返回值 : zlib error number
OK STATION, Webmaster, Brian Lin
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-947587/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux程式設計入門-crypt(轉)Linux程式設計
- Linux程式設計入門-gpm(轉)Linux程式設計
- Linux程式設計入門 - crypt(轉)Linux程式設計
- Linux下的shell程式設計入門(轉)Linux程式設計
- Linux程式設計入門 - Dialog(轉)Linux程式設計
- Linux程式設計入門 - SVGALIB(轉)Linux程式設計SVG
- Linux網路程式設計入門 (轉載)Linux程式設計
- TCSHshell程式設計入門(轉)程式設計
- SDL程式設計入門(26)運動程式設計
- Linux程式設計入門 - socket/inetd programming(轉)Linux程式設計
- Shell程式設計入門:Linux直譯器原理(轉)程式設計Linux
- Linux程式設計入門 fork/pthread/signals(轉)Linux程式設計thread
- 高手指點:jsp程式設計師運用設計模式入門步驟JS程式設計師設計模式
- Linux系統程式設計入門Linux程式設計
- linux程式設計之一:入門Linux程式設計
- Linux入門---(三)Shell程式設計Linux程式設計
- 【Linux】Linux系統程式設計入門Linux程式設計
- Linux程式設計入門 - termios/keymap/terminal(轉)Linux程式設計iOS
- Python程式設計入門(1) (轉)Python程式設計
- Python程式設計入門(3) (轉)Python程式設計
- Python程式設計入門(4) (轉)Python程式設計
- Python程式設計入門(6) (轉)Python程式設計
- Python程式設計入門(7) (轉)Python程式設計
- Python程式設計入門(8) (轉)Python程式設計
- 程式設計“初學者”入門指南 (轉)程式設計
- Linux系統下的多執行緒程式設計入門(轉)Linux執行緒程式設計
- 程式設計師有哪些發展方向?linux運維入門學習程式設計師Linux運維
- Linux程式設計入門 - termios/keymap/terminal program(轉)Linux程式設計iOS
- C++入門程式設計----C++運算子(8)C++程式設計
- 神經網路程式設計入門【轉】神經網路程式設計
- Linux雲端計算的應用場景有哪些?Linux運維入門Linux運維
- Go Web 程式設計入門--應用 ORMGoWeb程式設計ORM
- Linux-shell程式設計入門基礎Linux程式設計
- 入門程式碼程式設計程式設計
- windows網路程式設計經典入門 (轉)Windows程式設計
- Java多執行緒程式設計入門(轉)Java執行緒程式設計
- ADO資料庫程式設計入門(轉)資料庫程式設計
- Shell 程式設計入門程式設計