безопасная запись в файл Perl программой

kruto
На сайте с 26.10.2007
Offline
12
791

Добрый день. На сайте есть Perl программа, которая записывает данные из формы в файл. Я исполбзую такой способ:

open (COUNTFILE, "$name_msg"); #открывается файл

@staroe = <COUNTFILE>; #считываются данные

close(COUNTFILE); #закрывается файл

$kol=@staroe; #количество элементов в списке

$staroe[$kol]="$new"; #формирование новой строки

open (COUNTFILE, ">$name_msg"); #открывается файл

print COUNTFILE "@staroe\n"; #впечатываются данные

close(COUNTFILE); #закрывается файл

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

Здесь могла быть моя подпись.
P
На сайте с 08.03.2007
Offline
250
#1

масса способов. Например Lockfile::Simple или http://search.cpan.org/search?query=Lock&mode=module&n=100 .

kruto
На сайте с 26.10.2007
Offline
12
#2

Спасибо. Помогло.

UA
На сайте с 19.06.2006
Offline
100
#3
Pilat:
масса способов. Например Lockfile::Simple или http://search.cpan.org/search?query=Lock&mode=module&n=100 .

Зачем модули?! Достаточно flock()

P
На сайте с 08.03.2007
Offline
250
#4
Ugnich Anton:
Зачем модули?! Достаточно flock()

Недостаточно. За подробностями - см. тот же Lockfile::Simple

kruto
На сайте с 26.10.2007
Offline
12
#5

Мне впринципе и flock() оказалось достаточно, т.к. нагрузка небольшая (100-200 обращений к файлу в день) просто не хотелось самому изобретать велосипед в плане функции, которая ждет пока файл освободиться. поэтому взял готовое.

P
На сайте с 08.03.2007
Offline
250
#6
kruto:
Мне впринципе и flock() оказалось достаточно, т.к. нагрузка небольшая (100-200 обращений к файлу в день) просто не хотелось самому изобретать велосипед в плане функции, которая ждет пока файл освободиться. поэтому взял готовое.

Мне тоже эта возможность постоянно требуется.

Но есть и ещё одна - некоторая защита от того, что файлы окажутся на каком-то NFS - что редко, но случается, и где flock не сработает.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий