C/C++についての質問です。

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/07/06 20:15:32
  • 終了:--

回答(3件)

id:virus No.1

virus回答回数183ベストアンサー獲得回数12005/07/06 21:06:33

ポイント20pt

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 等はこれは使ってないはずです。

id:tomaton20

ありがとうございます。

2005/07/07 00:41:40
id:troubleantenna No.2

troubleantenna回答回数71ベストアンサー獲得回数02005/07/06 22:46:58

ポイント20pt

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

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

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

id:tomaton20

泥臭いんですか〜!

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

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

ありがとうございます。

2005/07/07 01:19:25
id:ymlab No.3

ymlab回答回数508ベストアンサー獲得回数342005/07/06 22:53:48

ポイント20pt

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

strtok関数を使います。


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

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

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


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

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

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

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

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


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

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

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

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

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

id:tomaton20

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

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

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

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

頑張ってそうします!

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

2005/07/07 01:30:39

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • とんがった括弧 -ギークなお姉さんは好きですか > < で > < と出せます。 strtok でおみくじ ギークなお姉さんは好きですか 4日目 おみくじとか作っちゃうかモナー!に触発さ
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません