Автор Тема: Аналог flock под Win.  (Прочитано 3683 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Lion

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 474
  • +0/-0
  • 0
    • Просмотр профиля
Аналог flock под Win.
« : 05 Декабря 2001, 16:27:54 »
Существует ? Особенно с использование PHP...

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
а так
« Ответ #1 : 08 Декабря 2001, 01:30:59 »
А если так:
перед открытием файла проверяем существует ли файл lock, если нет, то создаем lock, смело открываем рабочий файл и работаем, если существуем, то ждем секунду проверяем снова.
После завершения работы с файлом удаляем lock.
Т.е. если lock существует, то значит на файле стоит блокировка - с ним работают. Если нет, то нет блокировки. Конечно не лучший вариант :( но простенько. Стоит добавить проверку срока жизни lock - мало ли, программа до конца не доработала и старый lock Не удалили (т.е. 5мин жизни файла хватит. Если старше, то  его  стоит удалить).

#!/usr/bin/perl
#not flock()

my $lock=\'lock.lock\';
#Существет ли Lock
while(-e $lock){
   $i++;
   if ($i==$time_limit){die("Can not flock file - time limit out");}
  sleep 1;
 }
#Создаем файл Lock
open(LOCK, ">$lock")||die("Can not open file: $!");
close LOCK;
#Работаем с данными
open(FILE, ">file.txt")||die("Can not open file: $!");
print FILE $something;
close FILE;
#Удаляем Lock
unlink $lock;


На PHP это также можно сделать.
« Последнее редактирование: 08 Декабря 2001, 01:40:21 от Green Kakadu »
 в исканиях.

Оффлайн Oak

  • Дерево
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1481
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
exist/open
« Ответ #2 : 08 Декабря 2001, 14:16:43 »
Это 2 операции, а значит теоретически есть шанс сбоя.
Теория становится практикой при нескольких посещениях в сукунду (раз в месяц может збойнуть).

Надо использовать единичную операцию - переименовать файл.

Если удачно переименовал lock -> lock.moj то твои данные, если ошибка - то неуспел :)
А поработал - потом назад (только надо следить, чтобы никто не прибил скрипт до этого, а то все
застынет :^)
[основной броузер - SeaMonkey] Netscape Communicator 4 - is the best :) // see sources

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
угу
« Ответ #3 : 08 Декабря 2001, 14:27:11 »
Цитировать
Теория становится практикой при нескольких посещениях в сукунду (раз в месяц может збойнуть).

это точно, даже чаще. Все это на коленке сделанное, но вроде есть под win что-то приличное, только не могу вспомнить что.
 в исканиях.

Оффлайн Oak

  • Дерево
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1481
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
rename
« Ответ #4 : 08 Декабря 2001, 17:48:10 »
Не - rename таки действительно работающее решение :)
А вообще при таком числе запросов надо от файловой системы к серверам переходить...
Или своим или ширпотребовским *SQL
[основной броузер - SeaMonkey] Netscape Communicator 4 - is the best :) // see sources

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
угу
« Ответ #5 : 09 Декабря 2001, 01:01:11 »
Цитировать
Не - rename таки действительно работающее решение

да, согласен, существенно лучше.
Цитировать
Или своим или ширпотребовским *SQL

;) с этим не поспоришь
 в исканиях.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28