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

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Ответить
Dimitri
Сообщения: 2
Зарегистрирован: 03 май 2006, 23:30

Нашел фрагмент 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; #Удаляем временный файл
###############################

Большое спасибо!
UUU
Сообщения: 310
Зарегистрирован: 17 фев 2004, 09:27
Откуда: Иваново
Контактная информация:

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

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

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

Другие обращения к файлу автоматом будут ждать разлочивания.
Не работает в винде.
Реклама запрещена. См. Профиль :-)
Dimitri
Сообщения: 2
Зарегистрирован: 03 май 2006, 23:30

А что делать, если мне это нужно для винды, поэтому и не использую flock
Ответить