# # リネーム、perlのプロセスが取得できないサーバを考える # sub data_save { local($tmpfile) = $datafile; $tmpfile =~ s/(\w+)\.\w+$/$1\.tmp/i; local($flag) = 0; #10秒待っても書き込めない場合は諦める foreach (1 .. 10) { #テンポラリーファイルが存在するか確認 unless (-f $tmpfile) { #ロックファイルが無ければ作成してロックする if (open(TMP,">$tmpfile")) { print TMP "$datafile TMP File\n"; close(TMP); #ロックしている間に書き込む if (open(TMP,">$datafile")) { print TMP @DATA; close(TMP); $flag = 1; #ロック用テンポラリーファイルを削除する(ロック解除) unlink $tmpfile; last; } } } #ロック中なら1秒待つ sleep(1); } $flag; }