Linux - 从 /proc/partitions 内容到我可以'ls'的内容

linux -- getting from /proc/partitions contents to something I can 'ls'

本文关键字:ls 我可以 proc Linux partitions      更新时间:2023-10-16

我正在编写(又一个)文件管理器(学习东西:)并有一个愚蠢/愚蠢的块。

在 Linux 上,要枚举可以包含文件的存储设备,我认为最好的方法是解析/proc/partitions 文件的内容并提取/dev/sda* 条目。 (对吧? 但是,如何将/dev/sda* 映射到可以通过编程方式探索以获取目录内容的内容? 我打算使用 boost/filesystem,但由于我不能 ls/dev/sda,我假设我不能使用 boost 来迭代它。

概要:如何将/dev/sda* 转换为我可以"ls"的东西

我认为你误解了/dev/sd*对程序的实际含义。 它们是设备而不是目录。 您可以使用 mount 命令告诉操作系统将设备"解释"为文件系统,并将其附加到某个位置(root 或其他位置)。 正是这一步使它进入文件系统某处的"目录"。 因此,除了原始 I/O 命令(您不想这样做)之外,请挂载文件系统,然后尝试探索它。

这有点像打开一个文件。 执行此操作时,操作系统会为程序提供字节流,您可以通过该字节流随机访问文件。 但是在磁盘上,该文件实际上可能分散在硬盘驱动器(或任何设备)上。 但是操作系统正在将其"制作"成一种"不错"的格式,供您透明地处理。 访问目录/文件列表时,磁盘本身也是如此。

我希望我的例子能更清楚地说明为什么你想做的事情并不像你想象的那么简单。

即兴发挥,我会说没有参数的mount输出可能是一个更快的选择。这应该显示挂载的文件系统和设备,而/proc 将显示所有设备和分区。

设备/dev/sda*是块设备,需要挂载。为了能够ls它,您需要具有可以解释文件系统类型的东西。第一步:确定文件系统类型,在原始代码中,硬盘驱动器第一段的分区表中通常有一个标头代码,该标头代码将/dev/sda在Linux系统上,它将类似于ext3

接下来,您需要编写或使用库来与该文件系统接口,如果您获得Linux的内核源代码,则它具有大量用于与常见文件系统接口的API代码,以及用于标准POSIX调用的包装器,这正是您正在寻找的。 像lscwd这样的东西使用系统调用来检索有关挂载文件系统的信息,磁盘是一个块(有时是一个字符)设备,你需要能够与它交谈并使用相同的语言。