Нашел фрагмент 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; #Удаляем временный файл
###############################
Большое спасибо!
Блокировка одновременной записи в файл
Код очень кривой, основан на работе с временным файлом. Т.е. считается, что все работы происходят с временным файлом. Проблемы возникают, если вдруг скрипт вывалился и файл остался.
Для данной задачи, имхо, лучше использовать стандартный flock:
open(MBOX, ">>/usr/spool/mail/$ENV{'USER'}") or die "Can't open mailbox: $!";
lock();
print MBOX $msg,"\n\n";
unlock();
Другие обращения к файлу автоматом будут ждать разлочивания.
Не работает в винде.
Для данной задачи, имхо, лучше использовать стандартный flock:
open(MBOX, ">>/usr/spool/mail/$ENV{'USER'}") or die "Can't open mailbox: $!";
lock();
print MBOX $msg,"\n\n";
unlock();
Другие обращения к файлу автоматом будут ждать разлочивания.
Не работает в винде.
Реклама запрещена. См. Профиль :-)
А что делать, если мне это нужно для винды, поэтому и не использую flock