Страница 1 из 1

Блокировка одновременной записи в файл

Добавлено: 04 май 2006, 00:24
Dimitri
Нашел фрагмент Perl скрипта, который блокирует одновременную запись в файл. Это нужно для моей гостевой книги. Так как я плохо владею Перлом , мне не понятен следующий пункт:
"Здесь размещается код обработки непредвиденной ошибки"
Что это за код непредвиденной ошибки?
#############################
$lockfile="data.tmp"; #Имя временного файла блокировки
$count=50; $interval=0.05; #Кол-во попыток и интервал между ними

if (-e $lockfile)
{
#Если временный файл есть, ждем его удаления другим процессом

while (($count>0)&&(-e $lockfile))
{
sleep $interval;
$count-=1;
};
};

if ($count==0){
#Здесь размещается код обработки непредвиденной ошибки
};
open TF,">$lockfile"; #Создаем временный файл
close TF;

#...
#Здесь размещается собственно код работы с файлом данных
#...

unlink $lockfile; #Удаляем временный файл
###############################

Большое спасибо!

Добавлено: 04 май 2006, 08:57
UUU
Код очень кривой, основан на работе с временным файлом. Т.е. считается, что все работы происходят с временным файлом. Проблемы возникают, если вдруг скрипт вывалился и файл остался.

Для данной задачи, имхо, лучше использовать стандартный flock:

open(MBOX, ">>/usr/spool/mail/$ENV{'USER'}") or die "Can't open mailbox: $!";
lock();
print MBOX $msg,"\n\n";
unlock();

Другие обращения к файлу автоматом будут ждать разлочивания.
Не работает в винде.

Добавлено: 04 май 2006, 14:34
Dimitri
А что делать, если мне это нужно для винды, поэтому и не использую flock