Apache 1.3モジュールの開発

以前購入したApacheモジュール プログラミングガイドを活用する日がやって来ました。C言語の初心者でも比較的取っ付きやすく書かれています。Apacheのモジュールは、あらかじめ提供されているap_*系の関数を使えばかなり安全なコードが書けるんですね。

さて、まともにCを使ってコードを書くのはこれが初めてですが、普段JavaやRubyで可変長のリストに頼りまくっているため、単純な配列のみであれこれやろうとするとすぐにハマります。Apacheが提供するtableやarray_headerはなかなか便利なんですが、メンバがchar *に限られるようで、「構造体を格納できるハッシュはどこかに無いんかー」と叫びたくなってきます。まあ、それでもなんとか三日ほどで動くモジュールが作れましたので(User-Agentの内容に応じてレスポンスヘッダを加工する程度のもの)、Apacheモジュール プログラミングガイドはいい本です。

それにしても、Apacheモジュールの処理性能はさすがですね。効率度外視で書いたのにオーバーヘッドをまったく感じさせない。

oyama, 12 月 17th, 2003 at 20:51 [Comment]

評価して頂けてとても感謝しています。ありがとうございます。

「構造体を格納できるハッシュ」についてですが、きちんとキャストしてあげればtable型に任意の型のポインタを保持させることができます。

typdef struct {
/* いろいろ */
} my_rec;

my_rec *src, *dist;
table *t;

t = ap_make_table(r->pool, 1);
src = ap_palloc(r->pool, sizeof(my_rec));
ap_table_setn(t, “KEY”, (const char *)src);
dist = (my_rec *)ap_table_get(t, “KEY”);

ap_table_set()ではなく、ap_table_setn()を使っているのがミソです。ap_table_set()は受け取った値を内部で文字列として複製(ap_pstrdup)した上でtableにセットしますが、ap_table_setn()では複製を行わずに直接ポインタをtableにセットします。

すんません、この辺はApacheモジュールプログラミングガイドでは書いていていませんね(汗) 私のWebサイトにCookbook的な話題を貯めていこうと考えてはいるのですが、あまり進んでいません。。。

juno, 12 月 18th, 2003 at 11:11 [Comment]

おー、コード例まで書いていただいて、わざわざありがとうございます。だいぶコーディングが楽になりそうです。
http://module.jp/ のほうもチェックさせて頂きます。


使用可能なタグ <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>