c++ - Ubuntu 操作系统中的文件表

标签 c++ linux ubuntu filetable

linux/Ubuntu 操作系统是否创建一个表,该表保存每个文件的条目及其存储在硬盘上的绝对地址?

只是想知道,因为我打算制作一个文件搜索程序。

我知道有诸如 find 等终端命令,但由于我将在 C 中编程,我在想 Ubuntu 操作系统是否有任何此类功能,如果有,我如何访问该表?

更新:

正如一些人提到的,没有这样的东西,那么如果我想制作一个文件搜索程序,我将不得不搜索每个目录的每个文件夹,从程序根目录开始。生成的程序将非常缓慢并且性能不佳!那么有没有更好的办法呢?还是我的方式好!

最佳答案

您描述的“东西”通常称为文件系统,您可能知道有多种文件系统可用于 Linux:ext3、ext4、btrfs、Reiser、xfs、jffs 等。

您描述的表可能会很好地映射到 inode 目录组合。

从我的角度来看,文件在硬盘上的物理位置的整个管理与用户无关,它严格来说是操作系统的领域,除非你有一个很好的借口(比如你'重新编写数据恢复程序)并对所涉及的文件系统有非常深入的了解。此外,在大多数情况下,文件的存储不是是连续的,而是分布在磁盘上的多个位置(碎片)。

但这里更重要的问题可能是:通过这种方式查找文件,你到底希望达到什么目的?

编辑:根据 OP 的评论,我认为这里可能存在严重的误解 - 我看不到绝对文件地址和文件搜索器之间的联系,但这可能是由于我们各自对“的理解存在根本差异”文件系统上下文中的绝对地址”。

如果你只想查看文件系统中的所有文件,你可以

  1. 执行递归目录读取或
  2. 按照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/

相关文章:

docker - 无法在 Docker 中更新 Debian 容器

java - Netbeans(用于 c/c++ 的 MinGW 编译器)可以调用任意 C/C++ DLL(在 VS'05 中编译)吗?

linux - BASH:定义变量中的变量?

ubuntu - docker 坏安装驱动程序

c# - 使用 ssh.net 在 ubuntu 服务器上的文件末尾写入

linux - ffmpeg 多个输出仅适用于第一个 rtmp

c++ - 我可以将 Visual Studio 2005 设置为在调试时忽略特定代码区域中的断言吗

c++ - 观察者设计模式接口(interface)契约设计问题

c++ - 用另一个和额外元素的内容初始化 C++ (11) std::vector

用于 sudo 和 apache 的 linux umask