|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Victor Wagner 2:5020/400 05 May 2003 19:15:57 To : "Serg Chervjakov" Subject : Re: Движок -------------------------------------------------------------------------------- Serg Chervjakov <serg@enseza.elcom.ru> wrote: SC> Ага - потихоньку пошел въезжать:). SC> Т.е. для записи это выглдит примерно так: SC> open DATA,$filename; Указание режима доступа забыл. По умолчанию файл на чтение открывается. SC> flock(DATA,LOCK_EX); SC> print DATA $txt; SC> flock(DATA,LOCK_UN); SC> #Hо что будет, если другой скрипт начнет писать в это файл именно вот в этот SC> #промежуток времени??? Или такого не может быть впринципе? Локи у нас advisory, то есть нехороший процесс, который не пытается файл залочить, может все напортить. Hо если это будет другой процесс, который пишет по тому же алгоритму, он встанет на flock(DATA,LOCK_EX) и будет ждать, пока первый процесс flock(DATA,LOCK_UN) не скажет. После чего получит вожделенную блокировку и сделает свое дело. SC> close DATA; Кстати, close отпускает lock. SC> И еще, я так понял, если мне лень не забывать делать SC> use Fcntl ':flock'; SC> То вместо LOCK_SH, LOCK_EX, or LOCK_UN, надо юзать 1, 2, 8? Лучше не надо. Притащишь это на другую систему а там взяли и поменяли значения этих констант. SC> И уж что бы совсем полностью разобраться - что такоэ LOCK_NB? А это - признак того что не надо ждать. while (1) { if (flock(DATA,LOCK_EX|LOCK_NB)) { # Hам дали lock print DATA $something; last; } else { # нам не дали lock, занимаемся пока чем-нибудь другим # например обслуживаем GUI $mainwindow->update; } -- --- ifmail v.2.15dev5 * Origin: Free Net of Leninsky,45 (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/1517871cf15b5.html, оценка из 5, голосов 10
|