|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Michael Samanov 2:550/5068.1515 19 Jan 2001 00:45:51 To : Artem Chuprina Subject : Re: flock -------------------------------------------------------------------------------- Hello, Artem! At Thu, 18 Jan 01 12:00:24 +0300 Artem Chuprina wrote: AC> ненадежно), в досе - rename(). В юниксе rename() тоже атомарная, но AC> разрушающая, так что следует быть бдительным. И дополнять обработчиками die, AC> сигналов, и проверкой кроном залипших флаг-файлов. Меня гложут смутные сомнения... Вот сделал я нечто подобное для перезаписи файлов с созданием бэкапа, а теперь сумлеваюсь. Вопрос ниже. $new = IO::File->new("$filename.n", "a+"); $new->flock(LOCK_EX | LOCK_NB) or die $!; $old = IO::File->new($filename, "r"); $old->flock(LOCK_EX | LOCK_NB) or die $!; $new->seek(0,0); $new->truncate; $new->print(......); $new->flush; rename $filename, "$filename.b" or die $!; rename "$filename.n", $filename or die $!; $old->close; $new->close; Ежели где синтаксис неправильный или метод отсутствует, нижайше прошу простить, оно только для объяснения принципа. Естественно, весь этот бред сидит внутри eval. ВHИМАHИЕ, ВОПРОС! Где в такой схеме может подкрасться враг? Я имею в виду, в какой строчке чужой процесс может вклиниться и нагадить? В том, что открытый файл можно переименовывать, даже и не сомневайтесь. Можно. Естественно, я не имею в виду MD by BG. Sincerely yours, Michael (mailto:mike@vlink.ru). --- ifmail v.2.14 * Origin: Mike's home (2:550/5068.1515@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/794986cd0e11.html, оценка из 5, голосов 10
|