parsecfg - 設定ファイル解析ライブラリ

Yuuki NINOMIYA <gm@debian.or.jp>

$Date: 2002/02/20 13:51:00 $
この文書は parsecfg ライブラリのユーザーズマニュアルです。割といい加減に 書かれているので、この文書よりもサンプルプログラムとライブラリのソースコード を読んだ方がいいかもしれません :-p

1. はじめに

2. 使用法

3. ライセンス

4. 動作確認済み OS

5. 制限事項

6. 判明している不具合

7. 将来の予定

8. FAQ

9. 利用者へお願い

10. 作者

11. 最新リリース

12. 最新ソースコード

13. 関連リンク

14. 謝辞

15. バージョンアップ履歴


1. はじめに

1.1 概要

parsecfg は指定された設定ファイルを読み込み、各設定内容を 解析し動的に確保したメモリに保存するためのライブラリです。

1.2 特徴

1.3 必要な物

parsecfg を使用するには ANSI C 準拠のコンパイラが必要です。 動作確認は gcc version 2.95.4 で行っています。

また、必須ではありませんが、あなたのプログラムで GNU gettext を 使用することを強くお勧めします。gettext によるメッセージ出力の 国際化は、英語を母国語としない人々にとって非常にありがたいことです。 gettext に関する詳細は http://core.ring.gr.jp/pub/doc/gnu-info-j/gettext/gettext-ja.html を参照してください。


2. 使用法

2.1 インストール

parsecfg.c と parsecfg.h をあなたのプログラムの一部として取り込むだけ。

2.2 準備

設定ファイルを cfgParse 関数で取り込むには、cfgStruct 構造体の配列を作成し、 初期化する必要があります。配列のそれぞれの要素にはパラメータの名前と その種類、および取得した値を記録する変数のアドレス (設定ファイルが INI タイプの場合は値を記録する変数へのポインタの アドレス) を記述します。

cfgStruct 構造体は parsecfg.h で以下のように宣言されています。


typedef struct{
        char *parameterName;
        cfgValueType type;
        void *value;
} cfgStruct;

parameterName はパラメータ (キーワード) の名前、type はパラメータの型、 value は設定内容を記録する変数のアドレス (またはポインタのアドレス) です。

type には以下の種類があります。

CFG_BOOL

設定内容が「True」「Yes」「T」「Y」「1」ならば 1 を、 「False」「No」「F」「N」「0」ならば 0 を記録します。 大文字小文字は区別しません。

CFG_INT

int 型の設定内容を記録します。

CFG_UINT

unsigned int 型の設定内容を記録します。

CFG_LONG

long 型の設定内容を記録します。

CFG_ULONG

unsigned long 型の設定内容を記録します。

CFG_FLOAT

float 型の設定内容を記録します。

CFG_DOUBLE

double 型の設定内容を記録します。

CFG_STRING

文字列の設定内容を記録します。

CFG_STRING_LIST

複数の文字列を連結リストとして記録します。

CFG_END

構造体配列の終りであることを示します。

INT/UINT/LONG/ULONG では、0x で始まる文字列は 16 進数として、 0 で始まる文字列は 8 進数として扱われます。その他の場合は 10 進数として扱われます。

詳しくはサンプルプログラム (sample.c) を見てください。 サンプルプログラムは make でコンパイルできます。

2.3 関数リファレンス

これらの関数を使用するファイルでは最初に parsecfg.h を インクルードしてください。

void cfgSetFatalFunc(void (*f)(int, const char *, int, const char *))

cfgSetFatalFunc 関数は設定ファイルの解析時にエラーが発生した 場合に呼び出す関数を指定します。この関数を呼び出さなかった場合には parsecfg.c のエラー処理関数が使われます。

const char *cfgStrError(cfgErrorCode error_code);

cfgStrError 関数はエラーコードを説明する文字列を返します。 エラーコードは cfgSetFatalFunc で指定するエラー処理関数に最初の引数として 渡されます。

int cfgParse(const char *file, cfgStruct cfg[], cfgFileType type)

cfgParse 関数を呼び出すことで file で指定された設定ファイル が解析され、値がメモリに記録されます。

type は設定ファイルの種類で、ここに CFG_SIMPLE を指定すると 単純な 1 対 1 の設定ファイルとして処理します。CFG_INI を指定すると Windoze の INI ファイル (あるいは SAMBA) 風のセクションモデルとして 処理します。

返り値は読み込んだセクション数 (1,2,3,...) です。type に CFG_SIMPLE を指定した場合は通常 0 が返ります。もしエラーが発生すると -1 が返ります。

int cfgDump(const char *file, cfgStruct cfg[], cfgFileType type, int max)

cfgDump 関数は設定をファイルに書き出す関数です。

file は書き出すファイル名で、type は設定ファイルの種類です。 max にはセクション数を指定します。type が CFG_SIMPLE の場合は 何を指定しても構いません (通常は 0 を指定するでしょう)。

int fetchVarFromCfgFile(const char *file, char *parameter_name, void *result_value, cfgValueType value_type, cfgFileType file_type, int section_num, const char *section_name)

fetchVarFromCfgFile 関数を使うことで、file で指定された 設定ファイルから parameter_name で指定されたパラメータの設定値を 抽出することができます。

結果はポインタ result_value で示されたアドレスに格納されます。この 変数の種類は value_type で指定します。

file_type は設定ファイルの種類です。

section_num は設定値を抽出したいセクション番号を指定します。 もしこれが 0 以下ならば、セクション番号ではなく、section_name で 指定されたセクション名から抽出します。 file_type が CFG_SIMPLE の場合は何を指定しても構いません (通常は 0 と NULL を指定するでしょう)。

設定値が正常に取得できたら 0 が返ります。失敗したら -1 が返ります。

int cfgSectionNameToNumber(const char *name)

cfgSectionNameToNumber 関数はセクション名をセクション番号に 変換する関数です。

セクション名が引数に指定した name と一致するセクション番号 (0,1,2,...) が返ります。一致するセクションがなかった場合には -1 が返ります。 なお、セクション名の大文字小文字は区別しません。

char *cfgSectionNumberToName(int num)

cfgSectionNumberToName 関数は上の cfgSectionNameToNumber 関数とは逆に、 セクション番号からセクション名を取得します。

存在しないセクション番号を指定すると NULL が返ります。

int cfgAllocForNewSection(cfgStruct cfg[], const char *name)

cfgAllocForNewSection 関数は新しいセクションを定義するために 必要なメモリを確保します。新く作られるセクション名には name で 指定された名前が付けられます。

成功したら現在のセクション数 (1,2,3,...) が、失敗したら -1 が返ります。

int cfgStoreValue(cfgStruct cfg[], const char *parameter, const char *value,cfgFileType type,int section)

cfgStoreValue 関数は value を cfg に従って変数に格納します。 type は設定ファイルの種類です。section には値を格納する セクション番号 (0,1,2,...) を指定します。 type が CFG_SIMPLE の場合は何を指定しても構いません (通常は 0 を 指定するでしょう)。

成功したら 0 が、失敗したら -1 が返ります。

void cfgFree(cfgStruct cfg[], cfgFileType type, int numSections)

cfgFree 関数は cfgParse 関数によって確保されたメモリを開放します。 2 回以上 cfgParse 関数を呼び出すときは、この関数であらかじめメモリを 開放しておいてください。 type が CFG_SIMPLE のときはこの関数を呼び出しても何もしません (未実装です)。

2.4 設定ファイルの書式

空白文字 (スペース) とタブ文字は常に読み飛ばされます。これらの 特殊文字を含みたい場合はダブルクォーテーション " かシングル クォーテーション ' で全体を囲みます。 ダブルクォーテーションを含みたい場合はシングルクォーテーションで 囲んでください。逆も ok です。

シャープ記号 # の後ろはコメントと認識し、読み飛ばされます。

パラメータの大文字小文字は区別しません。 基本的な記述は、パラメータと値をイコール = で結んだものです。


# PARAMETER = VALUE

ParameterINT    = 65535
ParameterSTRING = GNU/Linux
QuotedString    = 'I pronounce "Linux" as "Leenooks".'
TRUEorFALSE     = FaLsE

同じパラメータが複数あった場合、設定値の種類が CFG_STRING_LIST ならば全てが記録されます。その他であれば一番最後に記述されたもの だけが有効になります。


# multiple parameters

# CFG_INT
ParameterINT = 255     # ignored
ParameterINT = 65535   # stored

# CFG_STRING_LIST
ListString   = "Debian GNU/Linux" # stored
ListString   = "FreeBSD"          # stored

連結リストに複数の値を指定したい時には以下の形式も利用できます。


# for linked list

ListString = {
        Internet
        "Exploder"
}

INI 風なセクションモデルの場合は、各セクション名を [ と ] で囲みます。


# Windoze INI-like file

[Linux]
STRING = rule!
VALUE  = 99999999

[Windoze]
STRING = suck!
VALUE  = -99999999

詳しくは sample.cfg および sample.ini を見てください。


3. ライセンス

Copyright (C) 1999-2001 Yuuki NINOMIYA (二之宮 祐樹) <gm@debian.or.jp>

本プログラムはフリー・ソフトウェアです。あなたは、Free Software Foundation が公表した GNU 一般公有使用許諾のバージョン 2、あるいは それ以降の各バージョンの中からいずれかを選択し、そのバージョンが 定める条項に従って本プログラムを再頒布または変更することができます。

本プログラムは有用とは思いますが、頒布にあたっては、市場性および 特定目的適合性についての暗黙の保証を含めて、いかなる保証も 行ないません。詳細については GNU 一般公有使用許諾書をお読みください。

あなたは、本プログラムと一緒に GNU 一般公有使用許諾の写しを 受け取っているはずです。そうでない場合は、Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA へ 手紙を書いてください。


4. 動作確認済み OS


5. 制限事項


6. 判明している不具合

特にありません。


7. 将来の予定

特にありません。


8. FAQ

特にありません。


9. 利用者へお願い

感想、提案、バグレポート、パッチ等はいつでも歓迎します。 お気軽にお送りください。


10. 作者

Yuuki NINOMIYA (二之宮 祐樹) <gm@debian.or.jp>
http://www.enjoy.ne.jp/~gm/index-ja.html


11. 最新リリース

最新の parsecfg の公式リリースは以下の URI からダウンロードできます。
http://www.enjoy.ne.jp/~gm/program/parsecfg/index-ja.html


12. 最新ソースコード

最新のソースコードは Anonymous CVS で取得できます。 リポジトリは :pserver:anonymous@linuxlovers.yi.org:/var/cvs を、 プロジェクト名は parsecfg を、パスワードは anonymous を指定してください。


% cvs -d :pserver:anonymous@linuxlovers.yi.org:/var/cvs login
(Logging in to anonymous@linuxlovers.yi.org)
CVS password: anonymous
% cvs -d :pserver:anonymous@linuxlovers.yi.org:/var/cvs checkout parsecfg

CVS の詳しい使い方は http://www-vox.dj.kit.ac.jp/nishi/cvs/cvs-manual/cvs-jp_toc.html を参照してください。


13. 関連リンク

A Configuration File Parser Using C++ and STL


14. 謝辞

14.1 借用コード/ライブラリ

14.2 コードまたはドキュメントの寄稿

Kolb Norbert <nkolb@htl.de>

And. Andruikhanov <andy@euinf.dp.ua>

Andreas Schuldei <schuldei@andrive.de>

Pascal Lengard <pascal.lengard@wanadoo.fr>

Guillaume Hajduch <Guillaume.Hajduch@enst-bretagne.fr>

Richard Rowell <rrowell@shreve.net>

Padraig Brady <padraig@antefacto.com>

14.3 翻訳

Krzysztof Krzyz.aniak <eloy@transilvania.eu.org>

Guillaume Hajduch <guillaume.hajduch@free.fr>

14.4 その他

コメントやバグレポート、提案を送ってくれた人々に感謝します。

そして、parsecfg を使ってくれるあなたにありがとう!


15. バージョンアップ履歴

2002/02/20 Ver 3.6.9

2002/02/14 Ver 3.6.8a

2002/02/13 Ver 3.6.8

2001/06/27 Ver 3.6.7

2001/02/22 Ver 3.6.6

2001/02/15 Ver 3.6.5

2001/01/16 Ver 3.6.4

2000/12/19 Ver 3.6.3

2000/12/18 Ver 3.6.2

2000/12/15 Ver 3.6.1

2000/12/06 Ver 3.6.0

2000/11/23 Ver 3.5.0

2000/10/07 Ver 3.4.0

2000/07/20 Ver 3.3.0

2000/02/24 Ver 3.2.1

2000/02/13 Ver 3.2.0

1999/12/24 Ver 3.1.2

1999/12/23 Ver 3.1.1

1999/12/22 Ver 3.1.0

1999/11/30 Ver 3.0.4a

1999/11/07 Ver 3.0.4

1999/10/19 Ver 3.0.3

1999/10/17 Ver 3.0.2

1999/10/11 Ver 3.0.1

1999/10/10 Ver 3.0.0

1999/09/27 Ver 2.0.3

1999/08/12 Ver 2.0.2a

1999/08/08 Ver 2.0.2

1999/07/01 Ver 2.0.1b

1999/06/29 Ver 2.0.1a

1999/06/09 Ver 2.0.1

1999/06/02 Ver 2.0.0

1999/04/03 Ver 1.0.1

1999/04/02 Ver 1.0.0


sgml21html conversion date: 2002/02/20(水) 22:51:30 JST