代码之家  ›  专栏  ›  技术社区  ›  mellowsoon

在文件被更改时读取

  •  0
  • mellowsoon  · 技术社区  · 15 年前

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

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

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

    1 回复  |  直到 15 年前
        1
  •  1
  •   Adrian Smith    15 年前

    在Unix/Linux上:

    所有进程都只是将文件看作一组具有长度的字节。如果其他人更改了字节或长度,所有其他进程都会立即看到这个新数据。

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

    推荐文章