linux/Ubuntu 操作系统是否创建一个表,该表保存每个文件的条目及其存储在硬盘上的绝对地址?
只是想知道,因为我打算制作一个文件搜索程序。
我知道有诸如 find 等终端命令,但由于我将在 C 中编程,我在想 Ubuntu 操作系统是否有任何此类功能,如果有,我如何访问该表?
更新:
正如一些人提到的,没有这样的东西,那么如果我想制作一个文件搜索程序,我将不得不搜索每个目录的每个文件夹,从程序根目录开始。生成的程序将非常缓慢并且性能不佳!那么有没有更好的办法呢?还是我的方式好!
最佳答案
您描述的“东西”通常称为文件系统,您可能知道有多种文件系统可用于 Linux:ext3、ext4、btrfs、Reiser、xfs、jffs 等。
您描述的表可能会很好地映射到 inode 目录组合。
从我的角度来看,文件在硬盘上的物理位置的整个管理与用户无关,它严格来说是操作系统的领域,除非你有一个很好的借口(比如你'重新编写数据恢复程序)并对所涉及的文件系统有非常深入的了解。此外,在大多数情况下,文件的存储不是是连续的,而是分布在磁盘上的多个位置(碎片)。
但这里更重要的问题可能是:通过这种方式查找文件,你到底希望达到什么目的?
编辑:根据 OP 的评论,我认为这里可能存在严重的误解 - 我看不到绝对文件地址和文件搜索器之间的联系,但这可能是由于我们各自对“的理解存在根本差异”文件系统上下文中的绝对地址”。
如果你只想查看文件系统中的所有文件,你可以
- 执行递归目录读取或
- 按照SmartGuyz的建议使用updatedb准备的数据库
无论如何你都想查看这些文件——几乎所有的运行时间都花在了这些文件上——我想不出任何优势 2) 会超过 1) 和 2) 有外部依赖的缺点, 在 casu 中 updatedb 准备的文件必须存在并且非常新鲜。
一个关于遍历目录比旧的 opendir/readdir/closedir 更高级的方法的 SO 问题:Efficiently Traverse Directory Tree with opendir(), readdir() and closedir()
EDIT2 基于 OP 的问题附录:是的,遍历目录需要时间,但这就是生活。考虑下一个最好的事情,即定位和 friend 。它依赖于将定期更新(通常每天一次)的“数据库”,因此将找不到所有在上次计划更新之后添加或重命名的文件,以及在更新之后删除的文件最后一次计划的更新将在数据库中提及,尽管它们不再存在。假设目标机器上什至安装了 locate,这是您无法确定的。
与编程中的大多数事情一样,查看以前对同一问题的解决方案永远不会有坏处,所以我建议您阅读 GNU findutils 的文档?
关于c++ - Ubuntu 操作系统中的文件表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12974166/