|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Artem Chuprina 2:5020/400 13 May 2002 16:02:47 To : Yaroslav Tchayckovsky Subject : Re: Как правильно модифицировать файл? -------------------------------------------------------------------------------- Здравствуй, Yaroslav Tchayckovsky. SG>>>>>>> open F,"+<blabla"; SG>>>>>>> flock (F,1); SG>>>>>>> #чтение данных в память SG>>>>>>> flock (F,2); SG>>>>>>> #Запись в тот же файл, замещая всё SG>>>>>>> close (F); SG>>>>>>> Правильно ли это? AC>>>>>> Hет. Очевидный deadlock при попадании в это место одного такого AC>>>>>> скрипта, когда другой находится в первой половине. YT>>>>> А как тогда правильно делать? AC>>>> Если ты собираешься лочить файл эксклюзивным локом, это надо делать AC>>>> сразу. YT>>> Сразу это когда именно? До его открытия что-ли?! AC>> Hет, сразу после. Вместо shared. YT> Может я совсем тормоз, но что-то не въеду. YT> Давай я попробую от корней пойти. YT> Формат flock такой: YT> flock(filehandle, operation); YT> operation: YT> $LOCK_SH = 1; YT> $LOCK_EX = 2; YT> $LOCK_NB = 4; YT> $LOCK_UN = 8; YT> $LOCK_SH=1 - SHARED LOCK ??? Угу. YT> $LOCK_EX=2 - Exclusive lock нельзя писать в файл, можно читать. Как раз наоборот. LOCK_SH подразумевает, что читать можно, писать - нет (более точно, он подразумевает, что доступ туда же в тот же самый момент может делать кто-то еще, потому и shared, что естественно для чтения, но неестественно для записи). LOCK_EX имеет семантику "а сейчас с этим ресурсом могу работать только я, а остальные подождут". Что уже подразумевает "могу нафиг все сломать, но потом починить". YT> $LOCK_NB=4 - ???? non-blocking. Побитовое "или" с другими режимами. Смысл - если запрошенный лок в момент обращения получить невозможно, flock не будет ждать, пока дадут, а завершится сразу с ошибкой. YT> $LOCK_UN=8 - снять лок. -- Artem Chuprina Communiware.net RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/358.49, ICQ: 13038757 --- ifmail v.2.15dev5 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/144542bae1d45.html, оценка из 5, голосов 10
|