2012-04-17 30 views
2

我正在写(又一个)文件管理器(学习东西:),并有一个愚蠢的/愚蠢的块。linux - 从/ proc /分区内容到我可以'ls'

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

简介:我怎么可以转换/ dev/sda上*的东西,我可以“ls”的

+1

要浏览文件系统,需要安装它。要获得块设备(sdXY)到挂载点的映射,请尝试查看/ etc/mtab文件。 – pmdj 2012-04-17 20:49:16

回答

1

我认为你错误地理解了/dev/sd*实际上对程序的影响。他们是设备不是目录。您可以使用mount命令告诉操作系统将设备“解释”为文件系统,并将其附加到某处(根或其他位置)。这一步使它成为文件系统某处的“目录”。因此,除了原始I/O命令(您不想这么做)之外,请挂载文件系统,然后尝试并探究它。

这有点像真的打开文件。当你这样做时,操作系统给你的程序一个字节流,你可以通过它随机访问文件。但在磁盘上,该文件实际上可能散布在整个硬盘驱动器(或任何设备)上。但操作系统正在将它“制作”成一种“很好”的格式,供您透明地处理。访问目录/文件列表时,磁盘本身也是如此。

我希望我的例子更明确地说明为什么你要做的不像你想象的那么简单。

+0

谢谢大家。我从大家那里学到了一些非常感谢你 – 2012-04-17 21:58:49

1

即兴,我会说的mount不带参数的输出可能是一个更快的选择。这应该会显示已安装的文件系统和设备,而/ proc会向您显示所有设备和分区。

1

设备/dev/sda*是块设备,需要安装。为了能够ls它你需要有一些可以解释文件系统类型。第一步:识别文件系统类型,在原始代码中通常有一个头部代码在硬盘的第一个分区表中的分区表,这将只是/dev/sda在Linux系统上它会像ext3

接下来你需要编写或使用一个与该文件系统接口的库,如果你获得了Linux的内核源代码,那么它有很多用于与普通文件系统接口的API代码,以及标准POSIX调用的包装器,这正是你正在寻找的东西对于。诸如lscwd之类的东西使用系统调用来检索关于已安装文件系统的信息,该磁盘是块(或有时是字符)设备,您需要能够与其通话并使用相同的语言。