【问题标题】:Is it possible to check if a file exists without making a request to hard disk in Linux?是否可以在不向 Linux 中的硬盘发出请求的情况下检查文件是否存在?
【发布时间】:2012-01-16 20:45:44
【问题描述】:

这是我在这里的第一篇文章。

我想检查一个文件是否存在但不使用硬盘。例如看这段代码:

<?php
$filename = '/path/to/foo.txt';

if (file_exists($filename)) {
    echo "The file $filename exists";
} else {
    echo "The file $filename does not exist";
}
?>

据我所知,ext4 是日志文件系统。这是否意味着脚本可以通过查看日志来检查文件是否存在,即主内存而不接触硬盘?

感谢您的宝贵时间。

UPD。

有没有什么文件系统可以将硬盘的日志保存在主存中,这样文件存在的操作就可以在不访问硬盘的情况下进行?

【问题讨论】:

    标签: linux ext3 ext4


    【解决方案1】:

    日志 (a) 存在于磁盘上,并且 (b) 完全解决了另一个问题。

    当你进行这样的调用时,内核会询问文件系统。如果文件结构的必要块缓存在内存中,它将不会访问磁盘。如果他们不是,它会的。

    【讨论】:

    • 谢谢,您的回答澄清了很多。但我还想知道一件事:如果我一次发出 2 个 file_exists 请求,是否访问了硬盘的同一部分,或者它可能是硬盘驱动器的不同部分和较远的部分?
    • 他们可能到处都是。目录不适合一个磁盘块,文件系统不一定将它们放在一起。
    【解决方案2】:

    没有。文件系统日志并不完全保存在内存中,并且无论如何都不包含文件系统中的所有元数据。它仅用作一种工具,可以更快地从不干净的卸载中恢复。

    【讨论】:

      【解决方案3】:

      它必须至少访问硬盘以查看它是否存在。现在实际打开文件?我认为不会。

      【讨论】:

      • 有没有什么文件系统可以将硬盘的日志保存在主存中,这样文件存在的操作就可以在不访问硬盘的情况下进行?
      • 我从未听说过。那只会占用太多内存,而且没有太多用处。您是否有不希望它访问硬盘的原因?
      • 另一个问题是日志、表格、列表等每次都必须加载到内存中,因为大多数内存都是易失性的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      相关资源
      最近更新 更多