代码之家  ›  专栏  ›  技术社区  ›  Yevgeny Simkin

如果Perl试图对正在上载的文件调用move(),会发生什么情况?

  •  12
  • Yevgeny Simkin  · 技术社区  · 16 年前

    有人正在将一个10Mb大小的文件FTPing到linux服务器上的文件夹中。 move() 作用于 File::Copy . Perl进程实际上将重命名文件作为其任务的一部分。这很重要,还是FTP不关心文件系统对文件的描述?

    移动() 成功移动部分文件,离开FTP做什么? 或者移动将失败并返回0?

    3 回复  |  直到 15 年前
        1
  •  10
  •   Norbert Hartl    16 年前

    不,move应该在新职位上完成下载过程。您只是将inode从一个位置移动到另一个位置。下载程序中打开的文件描述符仍应指向它。

    我只想重复一些其他人提到的内容。这仅在移动操作位于同一文件系统上时有效。如果它作为inode以外的另一个文件系统无法传输,因为它始终属于同一个文件系统。最可能的情况是,此时的部分数据被复制到新位置,而程序仍在旧inode中下载,旧inode不再附加到文件,因此无法使用。

        2
  •  5
  •   chaos    16 年前

    因为没有标准 move rename ,那么您可能不会有任何问题,因为您的情况出现问题的主要方式是在大多数系统上,将文件从一个文件系统移动到另一个文件系统(因此进行复制和删除,而不是真正的移动) 改名 在这种情况下,我们将失败。(因此,如果您的设置工作正常,就可以了。)

    如果你没有使用 但有些 移动 函数,例如,它将处理跨文件系统的移动,如果涉及多个文件系统,您很可能会得到一个部分文件。(例如,如果您现在都在一个文件系统上,那么这可能会成为一个非常棘手的问题,但稍后您上载的这些文件会占用大量空间,您会添加一个专用于存储它们的驱动器,而现在您正在进行跨文件系统移动。)

        3
  •  1
  •   zoul    16 年前

    我不确定,但很可能不会出什么差错。移动不会更改文件索引节点号,因此FTP服务器根本不会注意到移动,并将继续在新位置写入文件。简单地说,这个 move() 将成功并在新位置继续上载。

    推荐文章