人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

C/C++についての質問です。
よくapacheやpostfix、smbなどにconfの設定ファイルがあるのですが、
その中身は
xxx = /abc/efg
のようにxxx変数と内容ってかんじで使われてますが、
こういった仕組みを作るには、apacheやpostfixなどの
ソフトはどのようにして行っているのでしょうか?
明確にわかる方がいらっしゃいましたら宜しくお願いします。

●質問者: tomaton20
●カテゴリ:コンピュータ 学習・教育
✍キーワード:ABC Apache C/C++ postfix にわか
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● virus
●20ポイント

http://www.microsoft.com/japan/msdn/library/default.asp?url=/jap...

MSDN ライブラリ サイト移行に関する重要なお知らせ

ファイルを行単位で読んで、= で区切って一文字づつ解釈。たいていその種のことをやってます。

いちおう、


char conf[256], str[256];

FILE fp = fopen(”conf”, ”r”);

if (fp!=NULL)

{

fscanf(fp, ”%s = %s¥n”, conf, str);

fclose(fp);

}


こんな感じで conf に ”xxx” が、str に ”/abc/efg” が得られますが、このままだと = の前後に空白がないとダメだとか、改行がないとダメだとか、まったく違うパターンのファイルだと誤動作する可能性があるとか、色々問題あるので(つまりエラー処理が出来ない)まともなソフトは fscanf はほとんど使いません。

なお、Windows に限ってよければ GetPrivateProfileString() と言うAPIがありますので、


GetPrivateProfileString(””, ”xxx”, ””, str, sizeof str-1, ”conf”);


これで、str に ”/abc/efg” が得られます。

なお、最初の引数はセクション名で [ ] 内に指定した文字列で指定した行で区切られた部分だけを検索対象としますので apache 等はこれは使ってないはずです。

◎質問者からの返答

ありがとうございます。


2 ● troubleantenna
●20ポイント

http://www.ring.gr.jp/pub/net/samba/stable/samba-3.0.14a.tar.gz

うーん、結構泥臭くやってますよ。(^^;

やはりここは一通りソースをご覧になることをお勧めします。

sambaの場合、source/param/params.c で処理していますので、Parse()関数あたりを起点に読み進めていくとよろしいかと。

◎質問者からの返答

泥臭いんですか〜!

ライブラリかなにかを誰かが作っていて

便利なものがあったらな〜とは思ってみたのですが・・。

ありがとうございます。


3 ● ymlab
●20ポイント

http://www9.plala.or.jp/sgwr-t/lib/strtok.html

strtok

トークンに分割すればよいのでは?

strtok関数を使います。


たとえば、.iniファイルを一行読み込みで読み込んでいくとします。

で、トークン分割の字句に、[=]としておき、

一番目に得られたものを、変数名、二番目に得られたものをその値。とすればよいと思います。


ここで、[ ](スペースをどうするかですが、スペースを認めるiniファイルもあれば、スペースを認めないiniファイルがあります。)

もしも、スペースを認めるのでしたら、

http://www.hidecnet.ne.jp/~sinzan/tips/c/c_tip0e.htm

部分文字列を置換する-C/C++-水無瀬の部屋

こんな作業で、空白を削除する作業が必要になってきます。


また、もし[#などの]コメント行として扱いたい場合は、

トークンの分割字句に、[#]を入れておき、空白除去後の一番目のトークンが、#が含まれていたら無視しなさい。

などの対応が必要になります。

http://phpspot.net/php/pgini%83t%83@%83C%83%8B%82%F0%89%F0%90%CD...

iniファイルを解析する - phpspot

phpならこんな関数が用意されていますし、

Visual C++ならば、iniファイルの編集用の関数が用意されています。

◎質問者からの返答

ん〜phpは便利そうでいいですね〜!

そもそもCやC++で変数にする方法がわからない・・。

連想配列になんとか置き換えるんでしょうか???

とりあえずソースを読めみたいな雰囲気ですので

頑張ってそうします!

ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ