Zlib I/O Library

zlib

zlib は圧縮アルゴリズムをライブラリ化したものです.
http://zlib.net/

簡単な使い方は,奥村晴彦氏が zlib 入門にて説明しています.
http://oku.edu.mie-u.ac.jp/~okumura/compression/zlib.html

zlib の基本関数を利用して, ファイルを圧縮したり復元したりするサンプルを作成してみました. 圧縮と復元で違いはほとんどありませんが, deflate 系の関数と inflate 系の関数を使い分けるだけでなく, エラーの種類が少し異なることにも注意する必要があります.
sample-deflate.c (圧縮のサンプル)
sample-inflate.c (復元のサンプル)

実際のところ,gzopengzclosegzreadgzwrite などの関数が用意されているので, zlib 単体でもファイル入出力は簡単に実現できます.
sample-gz.c

Introduction

ZlibIO は, zlib を利用して ファイル入出力を行うためのライブラリです.

データを圧縮しながらファイルに書き出したり, 圧縮ファイルを復元しながら読み込んだりできます. 逆に,圧縮データを復元しながらファイルに書き出したり, ファイルを圧縮しながら読み込んだりできます. この少しアレゲな機能が,ZlibIO を利用する理由になるかもしれません.

Source

ZlibIOzlib の勉強用に作成したライブラリです.

zlibio.tgz - 6,168 bytes

MinGW gcc 3.4.2 で動作確認をしています.

Update

January 23, 2007
サンプルを追加しました.
January 2, 2007
使えないこともないと思って,公開することにしました.

Structures

zlibio.h からの抜粋になりますが, 以下のような構造体を提供します.

// ライブラリのハンドル
typedef  struct ZIO  *hZIO;
// メモリ上のデータ
typedef  struct ZMem
{
  void  *buf;    // バッファ
  int    avail;  // バッファ中の有効なバイト数
  int    size;   // バッファサイズ
}  ZMem, *hZMem;

Functions

zlibio.h からの抜粋になりますが, 以下のような関数を提供します.

// src を圧縮して dst に出力する
int  ZIO_Compress( const char *src, const char *dst );
// src を復元して dst に出力する
int  ZIO_Decompress( const char *src, const char *dst );
// ファイルを開く
// mode には [i][rw][0-9] を指定する
//   i: 指定すると,読み込み時に圧縮,書き込み時に復元
//  rw: 読み込みもしくは書き込み
// 0-9: 圧縮レベル(6: 初期設定, 0: 低圧縮率で高速, 9: 高圧縮率で低速)
int  ZIO_Open( hZIO *h, const char *path, const char *mode );
// ハンドルを破棄する
int  ZIO_Close( hZIO h );
// ファイルからデータを読み込み
int  ZIO_Read( hZIO h, void *buf, int n );
// データをファイルに書き込む
int  ZIO_Write( hZIO h, const void *buf, int n );
// path を mode に従って圧縮もしくは復元し,メモリ上に展開する
// h->buf が NULL であれば,動的にメモリを確保する
int  ZMem_Load( hZMem h, const char *path, const char *mode );
// メモリ上のデータを mode に従って圧縮もしくは復元し,path に出力する
int  ZMem_Save( hZMem h, const char *path, const char *mode );

Sample

sample.csample-cmd.c を参考にしてください.

To Do

何の予定もありません.

References

zlib.h を参考にしました.

バージョンが若干古いですが, zlib 1.1.4 Manual も参考にしました.

Back
Last-Modified: January 23, 2007