物欲日記ばっかり書かずに、たまにはお勉強の話でも。
fp = ap_pfopen(p, hoge.txt, "r");
if (fp == NULL) {
fprintf(stderr, "%sは無いよ!\n", hoge.txt);
return 1;
}
/* hoge.txt を色々弄って・・・*/
ap_pfclose(p, fp);
apacheのモジュールについて最近勉強しているので、やったことをメモしていこうと思ってます。色々調べてて、メモリとかファイルハンドル回りでほーほーと思ったことをいくつか。
- apacheモジュールはC言語にも関わらず、メモリのリソース管理はapacheがよしなにしてくれる。
- apacheはリソース管理のためにプール構造をとっている。
- 新たに確保するメモリ等はプールに結び付けて管理されるので、プール破棄時にメモリも破棄されるわけですな。
- というか、むしろメモリ開放のインターフェイスすら用意されてない。
- リソースプールからアロケートされたメモリの開放はapache自身がすることになってる。
- かってにプログラマがfree()とかしたらダメ。
- リクエスト時などに、一時的にメモリ確保とかファイルハンドルを割り当てたい場合は、Request poolを生成して、そこから割り当てれば、レスポンス終了時にRequest poolが自動的に破棄されて、メモリとかも開放される。
- 動的にメモリ確保する場合も、poolにから割り当てるので、NULLチェックの必要が無い。
ほーほー、ようするにCなのにメモリ管理は、用途によって用意された各種poolからpool生成して、そっからアロケートするから、プログラマが適当にメモリを弄るなってことなのね。