Когда читаешь из файла:
open(F,"<test");
flock(F,1);
....
close(F);
Когда пишешь в файл:
open(F,">test");
flock(F, 2);
....
close(F);
Лучше, когда переписывашь файл, создавать временный файл, т.е. пирмерно так:
if (-f "test.tmp"){
die "File locked !";
}
open(F,">test.tmp");
flock(F,1);
....
close(F);
rename("test.tmp", "test"); # Атомарное переименование.
Это простейший пример, нужно еще следить за тем, чтобы test.tmp не остался после аварийного падения скрипта и не заблокировал всю дальнейшую работу. Т.е. условие для максимального времени жизни лока в 30 секунд будет примерно такое:
if (-f "test.tmp" ){
if ((time() - stat("test.tmp"))[9] <= 30){
die "File locked !";
} else {
unlink("test.tmp"); # Время жизни лока истекло.
}
}