Чтение в файле во время его изменения - PullRequest
0 голосов
/ 25 октября 2010

Мне любопытно, что происходит в этом сценарии.Предположим, я открываю файл для чтения и начинаю читать содержимое в цикле.Например:

$fp = fopen('test.txt', 'r');
while(!feof($fp)) {
    fread($fp, 1024);
}
fclose($fp);

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

1 Ответ

1 голос
/ 25 октября 2010

В UNIX / Linux:

Все процессы просто видят файл в виде байтов с длиной.Если кто-то еще изменяет байты или изменяет длину, все другие процессы немедленно видят эти новые данные.

Открытый файл ссылается на индекс.Если вы создаете совершенно новый файл, то это новый индекс.Если вы переименуете новый файл поверх старого, имя файла в каталоге теперь будет ссылаться на новый индекс, тогда как у вас будет открыт старый индекс (даже если его больше нельзя увидеть, поскольку он нигде не связан ни с одним каталогом).в этом случае вы продолжаете видеть старый файл, и любой процесс, открывающий / изменяющий новый файл, видит только новый файл.

...