發(fā)信人: reden (Offer 快快來啊 ~!), 信區(qū): Linux
標 題: Linux程式設計入門 - zlib的運用
時 間: BBS 水木清華站 (Thu Apr 1 20:01:57 1999)
Linux程式設計入門 - zlib的運用
____gzip(*.gz)檔案格式幾乎是Linux下的標準格式了,有人認為bzip2的壓縮率比gzip來得高。一般來說,這個說法大致正確,不過根據(jù)我個人的經(jīng)驗,有一半以上的檔案,bzip2沒有比gzip的壓縮率來得高,有少數(shù)狀況下,gzip壓縮率反而比bzip2來的高。
____zlib是個支援gzip檔案格式的函數(shù)庫,它使得gz檔的存取就猶如開檔關(guān)檔一樣地容易,您可以很容易地為您的程式加入gz檔的支援。
____使用范例 : showgz.c
#include <stdio.h>
#include <stdlib.h>
#include <zlib.h>
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
將會把這個程式內(nèi)容顯示出來,showgz的作用可說等於gzip -dc。
____函數(shù)宣告
gzFile gzopen (const char *path, const char *mode); 開啟一個gzip(*.gz)檔。
mode叁數(shù)可為"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); 關(guān)閉檔案。返回值 : zlib error number
OK STATION, Webmaster, Brian Lin
--
在江湖中,只要拿起了刀,就是一場無涯的夢。
※ 來源:·BBS 水木清華站 bbs.net.tsinghua.edu.cn·[FROM: 159.226.21.168]
============ BTW,精華版里好像也有的,挺簡單的,呵呵
風車的翼子依然轉(zhuǎn)著 可是磨盤上 卻是空的...
文章選項:
|