The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Perl - как грамотно залочить файлы при записи в них?"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы WEB технологии (Public)
Изначальное сообщение [Проследить за развитием треда]

"Perl - как грамотно залочить файлы при записи в них?"
Сообщение от alex 946 emailИскать по авторуВ закладки on 03-Ноя-02, 08:16  (MSK)
Прочёл http://www.samag.com/documents/s=4075/sam1013019385270/sam0203i.htm

там рекомендуется

use Fcntl ':flock';  # import LOCK_* constants

open COUNTER, "<counter.dat"
or die "Can't read-open: $!";

flock COUNTER, LOCK_EX;  #

А в другом скрипте (рабочем) я нашёл

if(open(GET, "<$gf_path")) {
flock(GET, '2');
@gf_contents = <GET>;
close(GET);

Моего англиийского и умения писать скрипты не хатает, чтоб разобраться. Поможите советом....

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: Perl - как грамотно залочить файлы при записи в них?"
Сообщение от uldus Искать по авторуВ закладки on 03-Ноя-02, 13:23  (MSK)
Когда читаешь из файла:
open(F,"<test");
flock(F,1);
....
close(F);

Когда пишешь в файл:
open(F,">test");
flock(F, 2);
....
close(F);

Лучше, когда переписывашь файл, создавать временный файл, т.е. пирмерно так:
if (-f "test.tmp"){
   die "File locked !";
}
open(F,">test.tmp");
flock(F,1);
....
close(F);
rename("test.tmp", "test"); # Атомарное переименование.

Это простейший пример, нужно еще следить за тем, чтобы test.tmp не остался после аварийного падения скрипта и не заблокировал всю дальнейшую работу. Т.е. условие для максимального времени жизни лока в 30 секунд будет примерно такое:

if (-f "test.tmp" ){
   if ((time() - stat("test.tmp"))[9] <= 30){
      die "File locked !";
   } else {
      unlink("test.tmp"); # Время жизни лока истекло.
   }
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру