在文件被更改时读取文件

时间:2010-10-25 16:55:14

标签: php language-agnostic operating-system

我很好奇这个场景中发生了什么。假设我打开一个文件进行读取,并开始循环读取内容。像这样:

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

如果另一个进程在我阅读时开始附加到文件会发生什么?

1 个答案:

答案 0 :(得分:1)

在UNIX / Linux上:

所有进程只是将文件视为一堆长度为的字节。如果其他人更改字节或更改长度,则所有其他进程会立即看到此新数据。

打开文件是指inode。如果您创建一个全新的文件,那么它是一个新的inode。如果您通过旧文件重命名新文件,目录中的文件名现在引用新的inode,而您打开旧的inode(即使它现在不再被视为未链接到任何目录的任何位置。)在在这种情况下,您将继续看到旧文件,并且打开/修改新文件的任何进程都只能看到新文件。