>>355 乙です.
>2番目のにも、0666 が必要すね。

mode (0666) が反映されるのはファイル作成時だけなので,
単に追記するだけなら不要です(指定しても実害はないでしょうが).


で subject.txt 等の更新処理ですが,ロックなしだと例えば

bbs.cgi-1: subject.txt 読み込み
bbs.cgi-2: subject.txt 読み込み
bbs.cgi-1: 1111111111.dat レス数インクリメント
bbs.cgi-2: 1111111112.dat レス数インクリメント
bbs.cgi-1: subject.txt.1 に書き出し
bbs.cgi-2: subject.txt.2 に書き出し
bbs.cgi-1: subject.txt.1 -> subject.txt にリネーム
bbs.cgi-2: subject.txt.2 -> subject.txt にリネーム

のようになると「1111111111.dat レス数インクリメント」は反映されなく
なってしまいますね.これならいっそのこと,一時ファイル名は固定にして
O_EXCL 付きで sysopen() して,失敗したら subject.txt の更新処理自体
スキップするようにしてしまってもいいかも知れません.

きっちりやるとしたら,やはりロックせざるを得ないでしょう.
ちなみに,bbsd ではファイルロックより軽い mutex で排他制御してます.
# もっとも,この前の負荷試験では mutex の保護下でやってるのに
# 1000 越え発生という奇妙な現象も起こってしまったので,
# その点は要観察なわけですが......