ファイルロック

FLASH+CGIのアクセスカウンタのソースを手に入れたので、ファイルロックの勉強してました。
CGIは、面倒なのでperlでテストしました。


ロックにはflock関数を使います。以下はファイル書き込みの手順(カウンタ用)です。


open(LOCK, "lock.txt");
flock(LOCK, 2); #ファイルロック


while(1) {
open(IN, "count.txt") || last;
$count = ;
close(IN);
$count++;
open(OUT, "> temp.txt") || last;
print OUT "$count\n" || last;
close(OUT) || last;
rename("temp.txt", "count.txt"); #ファイル名変更
last;
}


flock(LOCK, 8); #ファイルアンロック
close(LOCK);


説明は必要ないと思います。
ただ、flock(LOCK, 8)はなくてもいいです。
close(LOCK)で自動的にアンロックされます。


rename(a, b)関数は、ファイルAのファイル名をAからBに変更します。
Bがすでに存在する場合は上書きされます。


open(FILEHANDLE, filename)関数は、読み込みで開くか書き込みで開くかで動作が異なります。
書き込みで存在しないファイルを開くと、ファイルが新たに作成されます。
一方、読み込みのときは作成されません。