|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Artem Chuprina 2:5020/371.32 15 Jan 2001 11:31:23 To : Andrei V. Lisyansky Subject : Re: flock -------------------------------------------------------------------------------- В твоём письме от Sat, 13 Jan 2001 18:20:35 +0300 написано: DW>>> Почемy ActivePerl for Win32 не понимает сабжевyю командy? AC>> Потому что операционная система MS-DOS и графические надстройки над AC>> ней не поддерживают такие локи. В NT понимает. AVL> Я конечно извиняюсь за запоздалую реакцию на данное письмо, но не проще AVL> ли обойти flock() следующей конструкцией?: Проще. Hо не годится. AVL> while (-e "lockfile") {sleep(1);} #Вдруг кто-то уже работает с файлом, AVL> ждём! Во-первых, вот в этот момент кто-то влезает и создает этот файл... AVL> open LOCK, ">lockfile"; close LOCK; #Дождались, создаём свой. Поверх вышеупомянутого. Мораль: вероятность race condition снижается, но совсем не до нуля. AVL> open (FILE, ">file.ext") || &filedie; #Работаем с файлом AVL> print FILE "test"; AVL> close FILE; AVL> unlink ("lockfile"); #Удаляем залочку AVL> sub filedie AVL> { AVL> unlink("lockfile"); AVL> die "Source file was not found"; AVL> } Далее, unlink надо, помимо всего прочего, вешать обработчиком die (то есть писать в $SIG{__DIE__}, и проверять его возраст и все такое, потому что он может остаться от неудачно (например, по GPF) сдохшей программы. Что уже требует сложной и неочевидной логики. -- 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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/72547f27dbfd9.html, оценка из 5, голосов 10
|