★新落書き帳(notebook2.cgi)にロック機能を付ける 1.スクリプトの最後に関数data_save(lock.pl)を張りつけます。 sub data_save { #指定したデータファイルと同じ名前で拡張子が「.tmp」の #ファイル名を作成 $datafile =~ /(.+)\..+$/; local($filename) = $1; if ($filename !~ /.+/) { &error(bad_filename); } local($tmpfile) = "$filename.tmp"; local($tmpflag) = 0; #NTサーバーとそれ以外のサーバで処理を分岐 if ($NT_Server) { #NTサーバでrename出来ないものがあるため #テンポラリーは書き込み中を知らせるダミーとしてだけに使用 foreach (1 .. 10) { unless (-f $tmpfile) { if (open(TMP,">$tmpfile")) { close(TMP); if (open(DAT,">$datafile")) { print DAT @DATA; close(DAT); $tmpflag = 1; } unlink $tmpfile; if ($tmpflag) { last; } } } sleep(1); } } else { #リネームや、CGIのファイル作成が許可されている場合は、 #より強固なロックが可能 #データはテンポラリーに書き込まれるためバッティングの可能性は #非常に低くなる #現在、他のプロセスが書き込み中かをテンポラリーの有無で調べる foreach (1 .. 10) { #書き込み中で無い場合はフラグを立ててループから出る unless (-f $tmpfile) { $tmpflag = 1; last; } $tmpflag = 0; #書き込み中なら1秒待つ sleep(1); } #書き込み中でないフラグが立っている場合にだけ #実際の書き込みを実行する if ($tmpflag == 1) { $tmp_dummy = "$$\.tmp"; if (!open(TMP,">$tmp_dummy")) { &error(bad_tmpfile); } close(TMP); chmod 0666,$tmp_dummy; if (!open(TMP,">$tmp_dummy")) { &error(bad_tmpfile); } print TMP @DATA; close(TMP); foreach (1 .. 10) { unless (-f $tmpfile) { if (!open(TMP,">$tmpfile")) { &error(bad_tmpfile); } close(TMP); rename($tmp_dummy,$datafile); unlink $tmpfile; $tmpflag = 1; last; } $tmpflag = 0; sleep(1); } } } $tmpflag; } 2.NTサーバの方はrequire 'jcode.pl';の次の行にでも   $NT_Server = 1;を追加します。 3.データ書き込みルーチンを削除して関数を呼び出します。 削除する書き込みルーチン if (!open(NOTE,">$datafile")) { &error(bad_file); } print NOTE @DATA; close(NOTE); このコードを削除して &data_save; を挿入します。 2ヶ所ありますから忘れずに変更してください。 これだけの変更であなたの大切なデータを強力にロックしてくれます。