2012-05-08 3 views
0

I locked a file, и я пытаюсь проверить, как система реагирует на заблокированный файл. Я бы хотел, чтобы другие процессы дождались, пока процесс будет выпущен до тех пор, пока он не сможет снова записать этот файл и не возвращаться с ошибкой.проверка блокировки файла

Проблема заключается в том, что я делаю, я не могу заблокировать файл и делать некоторые ожидания, пока другой процесс запрашивает файл, и видеть реакцию системы на этот заблокированный файл.

Я пробовал
1. sleep() который не работает, он останавливает весь двигатель php.
2. Я создал пакетный файл, который просто приостанавливается, пока вы не нажмете enter. и используется exec("cmd.exe /c START c:\\1.bat");

Так что догадка в том, что все процессы на самом деле являются одной последовательной очередью задач, так что если кто-то приостановлен по какой-либо причине, то есть все остальные?

так Как проверить, заблокирован ли файл?
Но, конечно, если я прав, в чем смысл блокировки файла, если другие процессы не могут получить к нему доступ в любом случае?

+1

Это пункт блокировки файла исключительно. Никто другой не сможет получить к нему доступ. – Ahatius

+0

У вас есть 2 скрипта, который блокирует файл, который ожидает, что файл будет выпущен, чтобы потребовать его? – Ahatius

+0

Один скрипт должен блокировать файл и удерживать его. Я хотел бы видеть, что происходит, когда другой скрипт выполняет «require_once» для него. – Ted

ответ

1
$file = fopen('somefile.php', 'r+'); 

while(!flock($file, LOCK_SH | LOCK_NB)) { 
    sleep(1); 
} 

require 'somefile.php'; 

Поскольку flock не работает в php-скриптах, вам необходимо проверить, присутствует ли блокировка.

+0

Сон не режет его, потому что он останавливает всю систему. – Ted

+0

Зависит, если скрипт вызывается каким-то родительским скриптом, тогда он остановит их все. Он не остановит весь сервер. Сон в одном скрипте не влияет на сценарий, который вызывается отдельно. Я просто спал там, чтобы поддерживать низкий уровень использования ЦП, возможно, есть еще один способ удержать использование ЦП во время цикла. Я предполагаю, что файл, проверяющий блокировку файла, вызывается отдельно. – Ahatius

1

require_once обрабатывается php. Из-за этого вы не можете просто приобрести замок для него AFAIK. Если вы посмотрите на блокировку файлов, см. this
Указывает, что вы должны использовать блокировки всякий раз, когда пытаетесь получить доступ к заблокированному файлу.

Смежные вопросы