Главная страница


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Artem Chuprina                       2:5020/371.32  22 Jan 2001  13:06:46
 To : Mike
 Subject : Re: flock
 -------------------------------------------------------------------------------- 
 
 В твоём письме от Thu, 18 Jan 2001 23:45:51 +0300 написано:
 
 mvr> Меня гложут смутные сомнения... Вот сделал я нечто подобное для
 mvr> перезаписи файлов с созданием бэкапа, а теперь сумлеваюсь.
 mvr> Вопрос ниже.
 
 mvr> $new = IO::File->new("$filename.n", "a+");
 mvr> $new->flock(LOCK_EX | LOCK_NB) or die $!;
 mvr> $old = IO::File->new($filename, "r");
 mvr> $old->flock(LOCK_EX | LOCK_NB) or die $!;
 mvr> $new->seek(0,0);
 mvr> $new->truncate;
 mvr> $new->print(......);
 mvr> $new->flush;
 mvr> rename $filename, "$filename.b" or die $!;
 mvr> rename "$filename.n", $filename or die $!;
 mvr> $old->close;
 mvr> $new->close;
 
 mvr> Ежели где синтаксис неправильный или метод отсутствует, нижайше
 mvr> прошу простить, оно только для объяснения принципа. Естественно,
 mvr> весь этот бред сидит внутри eval.
 
 mvr> ВHИМАHИЕ, ВОПРОС!
 
 mvr> Где в такой схеме может подкрасться враг? Я имею в виду, в какой
 mvr> строчке чужой процесс может вклиниться и нагадить? 
 
 Во-первых, возможен крэш процесса или системы между двумя rename с потерей
 файла. Если уж на то пошло, то первый rename должен называться link.
 
 Во-вторых, возможна ситуация, когда первая строка выполняется перед последним
 rename параллельного процесса, а вторая - после close параллельного процесса.
 В результате ты имеешь один файл в $old и $new. Потеря файла.
 
 Может, еще дыры есть, я сейчас торможу. Hо тебе пока хватит :-)
 
 -- 
 Artem Chuprina                            E-mail: ran@ran.pp.ru
 Programmer                                  FIDO: 2:5020/371.32
 Memonet Ltd.                             Phone: +7-095-284-1356
 --- slrn/0.9.6.3-as (Linux)
  * Origin: AKA с подствольным плюсомётом (2:5020/371.32)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: flock   Artem Chuprina   22 Jan 2001 13:06:46 
Архивное /ru.cgi.perl/7171143b679e2.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional