您所描述的“事物”通常称为文件系统,您可能知道有多种可用于 Linux 的文件系统:ext3、ext4、btrfs、Reiser、xfs、jffs 等。
您描述的表可能会很好地映射到 inode-directory 组合。
从我的角度来看,文件在硬盘上的物理位置的整个管理与用户无关,它严格来说是操作系统的域,除非你有一个很好的借口(比如你正在写一个数据恢复程序)和所涉及的文件系统的非常深入的知识。此外,在大多数情况下,文件的存储空间不会是连续的,而是分布在磁盘上的多个位置(片段)上。
但这里更重要的问题可能是:通过这种方式查找文件,您究竟希望达到什么目的?
编辑:根据OP的评论,我认为这里可能存在严重的误解-我看不到绝对文件地址和文件搜索器之间的联系,但这可能是由于我们各自对“绝对地址”的理解存在根本差异在文件系统的上下文中。
如果您只想查看文件系统中的所有文件,您可以
- 执行递归目录读取或
- 按照 SmartGuyz 的建议使用由 updatedb 准备的数据库
无论如何,您都想查看文件-这就是几乎所有运行时都将花费的地方-我想不出任何优势 2) 会超过 1) 和 2) 具有外部依赖项的缺点,以防万一updatedb 准备的文件必须存在并且非常新鲜。
一个关于遍历目录比旧的 opendir/readdir/closedir 更高级的方法的问题:Efficiently Traverse Directory Tree with opendir(), readdir() and closedir()
EDIT2 基于 OP 的问题附录:是的,遍历目录需要时间,但这就是生命。考虑下一个最好的事情,即定位和朋友。它依赖于一个定期更新(通常每天一次)的“数据库”,因此在最后一次计划更新之后添加或重命名的所有文件都不会被发现,而在最后一次计划更新之后删除的文件将在数据库,尽管它们不再存在。假设即使在目标机器上安装了 locate ,您也无法确定。
与编程中的大多数事情一样,查看以前对同一问题的解决方案永远不会有什么坏处,所以我可以建议您阅读GNU findutils的文档吗?