いしどうさん、
現在のActivePerlのドキュメント中の perlport によれば、flock は、
Not implemented (Mac OS, VMS, RISC OS, VOS).
Available only on WindowsNT (not on Windows95). (Win32)
ということです。
もちろんここでいう Windows95 は Windows95/98/Me のことだと思います。
つまり WinNT/2000 では flock が使えますが Win95/98/Me では使えないということになります。
この状況は Perl for Win32 (build 3xx) の時から変わっていないようです。
Perl for Win32 のソースを見た時の記憶では、flock は WindowsAPI の LockFileEx を使っています。ところが LockFileEx は Win95系では使えないので、"flock is not available on Windows95!" とか言うメッセージを出すようになっていました。
つまり、Win32 用に flock を implement したのだけれど Windows95系では LockFileEx が使えないので not available だ、ということではないかと。
Cygwin の Perl5.6.0 では flock が使えるという話もあったのですが、もしそうだとすると Cygwin が LockFileEx をエミュレートするようなことをしているのではないかという気がします。確認してはいませんが。
ところで、ActivePerl では fork は使えるのですね。
同じく perlport の fork のところは
Emulated using multiple interpreters. See the perlfork manpage. (Win32)
となっています。そして perlfork によると、スレッドを擬似プロセスとして fork するようにエミュレートしているそうです。
PerlのバージョンではなくてOSがNTかどうかが関係するのではありませんか?
ohohさんへ
最新版の ActivePerl (build 623) は、flock をサポートしていますよ。
500番台のbuildでもサポートしていたような記憶があります。
ohoh さん、
rename が失敗するのは、普通は、リネーム元のファイルがないかリネーム先のファイルが既に存在しているかだと思います。
調べてみてください。
調べてみても原因不明なら、そのCGI一式をメールで送ってください。
ブラウザからの入力でhtmlを生成する日記タイプのcgiが
renameができず、ファイルが更新されません。
flockを使っているフリーのcgiなのですが、
過去ログを拝見し、ファイルロックが使えないと知り
flockの行に#を書き込み、単一スレッドで使用してみましたが
renameができないとなってしまいます。
このcgiの使用をあきらめた方がよろしいでしょうか?
win95で、pw32i316.exeを実装しています。