我正在写(又一个)文件管理器(学习东西:)并且有一个愚蠢/愚蠢的块。
在Linux上,为了枚举可以包含文件的存储设备,我认为最好的方法是解析/ proc / partitions文件的内容并提取/ dev / sda *条目。 (对吗?)但是,如何将/ dev / sda *映射到我可以通过编程方式探索以获取目录内容的内容?我打算使用boost / filesystem,但是因为我不能ls / dev / sda我假设我不能使用boost来迭代它。
概要:我怎样才能将/ dev / sda *转换成我能做的事情
答案 0 :(得分:1)
关闭袖口,我会说没有参数的mount
的输出可能是更快的选择。这应该会显示挂载的文件系统和设备,而/ proc会显示所有设备和分区。
答案 1 :(得分:1)
设备/dev/sda*
是一个块设备,需要安装。为了能够ls
,你需要有能够解释文件系统类型的东西。第一步:识别文件系统类型,在原始代码中,硬盘驱动器的第一段中的分区表中通常有一个头代码,它只是/dev/sda
在Linux系统上它就像{{1} }}
接下来,您需要编写或使用库来与该文件系统连接,如果您获得Linux的内核源代码,它有很多用于与公共文件系统连接的API代码,以及用于标准POSIX调用的包装器你在寻找什么。像ext3
和ls
之类的东西使用系统调用来检索有关已挂载文件系统的信息,磁盘是一个块(有时是一个字符)设备,你需要能够与它交谈并说同一种语言
答案 2 :(得分:1)
我认为你错误地理解了/dev/sd*
究竟是什么对一个程序。它们是设备而不是目录。您可以使用mount
命令告诉操作系统将设备“解释”为文件系统,并将其附加到某个位置(root或其他方式)。这一步使它成为文件系统某处的“目录”。因此,除了原始I / O命令(您不想这样做)之外,安装文件系统,然后尝试探索它。
这有点像打开一个文件。执行此操作时,操作系统会为您的程序提供一个字节流,您可以随机访问该文件。但是在磁盘上,该文件实际上可能分散在整个硬盘驱动器(或任何设备)上。但操作系统正在“制作”它成为一种“漂亮”的格式,供您透明地处理。访问目录/文件列表时,磁盘本身也是如此。
我希望我的例子更清楚地说明为什么你要做的事情并不像你想象的那么简单。