Forum Webscript.Ru
Программирование => Perl => Тема начата: 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 прав. Блокировки должны сбрасываться.
И вообще лучше открывать через fopen
Подробности тут( особенно комментарии):
http://www.php.net/manual/en/function.flock.php
-
Весь прикол в том, что если ты заблокировал файл одной прогой "на запись" а второй хочешь его прочитать(без попытки заблокировать) - это у тебя получится! :) Почему? Читай доки...;)
-
Да, вначале запускаю первый скрипт, потом, пока он спит 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."
Ну так как же проверить, заблокирован ли файл?
-
Насколько я понял:
perldoc -f stat
-
Насколько я понял:
perldoc -f stat
Не могли бы вы пояснить?
Насколько я знаю, ф-цией stat пожно получить права доступа к файлу, дату изменения и доступа. Но не информацию о блокировке.
Или я ошибаюсь?
-
Evgeny, Serchey тебе правильно ответил: файл нужно блокировать из всех программ, обращающихся к нему. Чтобы проверить, попробуй заблокировать: вернет истину - значит не был заблокирован, вернет ложь - уже кем-то заблокирован.
-
YA, теперь понятно, спасибо.
-
А мне? ;)
-
[OFF]Serchey, будешь в Москве, поделюсь "спасибом". :);)
[/OFF]
-
Serchey, ты тоже конежно имелся в виду. По умолчанию ;)
-
:beer: