Forum Webscript.Ru

Программирование => Perl => Тема начата: Evgeny от 08 Октября 2002, 19:58:39

Название: Проверить, заблокирован ли файл?
Отправлено: Evgeny от 08 Октября 2002, 19:58:39
Привет всем!
Подскажите пожалуйста, как проверить, заблокирован ли файл ф-цией flock (из другого скрипта).
Первый скрипт:

open(F,">>lock_test.txt");
flock(F,2);
sleep(60);
close(F);

Второй скрипт:

if (open(F,"{  print "\\n\\nlock_test.txt opened.";
   close(F);
}
else
{  print "\\n\\nlock_test.txt not opened!";
}


Сначала запускаю первый скрипт, потом второй. Вывод второго: "lock_test.txt opened".
Разве не должна ф-ция open возвращать false?
Большое спасибо.
Название: Проверить, заблокирован ли файл?
Отправлено: GotZfild от 08 Октября 2002, 20:48:27
Я так понимаю, что ты сначала запускаешь первый скрипт, а потом - второй. Только блокировка осуществляется во время выполнения выполнения скрипта, а при завершении исполнения все блокировки сбрасываются.
Название: Проверить, заблокирован ли файл?
Отправлено: ThE0ReTiC от 09 Октября 2002, 00:49:22
Вообще-то GotZfild прав. Блокировки должны сбрасываться.
И вообще лучше открывать через fopen
Подробности тут( особенно комментарии):
http://www.php.net/manual/en/function.flock.php
Название: Проверить, заблокирован ли файл?
Отправлено: Serchey от 09 Октября 2002, 10:11:00
Весь прикол в том, что если ты заблокировал файл одной прогой "на запись" а второй хочешь его прочитать(без попытки заблокировать) - это у тебя получится! :) Почему? Читай доки...;)
Название: Проверить, заблокирован ли файл?
Отправлено: Evgeny от 09 Октября 2002, 11:38:21
Да, вначале запускаю первый скрипт, потом, пока он спит 60 секунд, запускаю второй.
Если не нравиться, что второй скрипт открывает на чтение, могу и на запись попробовать, результат тот же.
Файл lock_test.txt в начале не существуют.
Первый скрипт:

open(F,">lock_test.txt");
flock(F,2);
print F "This is my text.";
sleep(60);
close(F);

Второй скрипт (запускается через 5 секунд после старта первого):

if (open(F,">lock_test.txt"))
{  print "\\n\\nlock_test.txt opened for writing.";
   print F "Whtat the fuck?!";
   close(F);
}
else
{  print "\\n\\nlock_test.txt not opened!";
}


Вывод второго: "lock_test.txt opened for writing.".
В файле lock_test.txt содержится текст "This is my text."
Ну так как же проверить, заблокирован ли файл?
Название: Проверить, заблокирован ли файл?
Отправлено: NeoNox от 09 Октября 2002, 12:08:13
Насколько я понял:
perldoc -f stat
Название: Проверить, заблокирован ли файл?
Отправлено: Evgeny от 09 Октября 2002, 12:59:26
Цитировать
Насколько я понял:
perldoc -f stat

Не могли бы вы пояснить?
Насколько я знаю, ф-цией stat пожно получить права доступа к файлу, дату изменения и доступа. Но не информацию о блокировке.
Или я ошибаюсь?
Название: Проверить, заблокирован ли файл?
Отправлено: YA от 09 Октября 2002, 17:04:17
Evgeny, Serchey тебе правильно ответил: файл нужно блокировать из всех программ, обращающихся к нему. Чтобы проверить, попробуй заблокировать: вернет истину - значит не был заблокирован, вернет ложь - уже кем-то заблокирован.
Название: Проверить, заблокирован ли файл?
Отправлено: Evgeny от 10 Октября 2002, 12:16:21
YA, теперь понятно, спасибо.
Название: Проверить, заблокирован ли файл?
Отправлено: Serchey от 10 Октября 2002, 12:18:55
А мне? ;)
Название: Проверить, заблокирован ли файл?
Отправлено: YA от 10 Октября 2002, 14:28:49
[OFF]Serchey, будешь в Москве, поделюсь "спасибом". :);)
[/OFF]
Название: Проверить, заблокирован ли файл?
Отправлено: Evgeny от 10 Октября 2002, 14:54:28
Serchey, ты тоже конежно имелся в виду. По умолчанию ;)
Название: Проверить, заблокирован ли файл?
Отправлено: Serchey от 11 Октября 2002, 00:06:54
:beer: