如何以编程方式发现文件系统而不安装设备(如“fdisk -l”)

时间:2012-09-19 13:16:05

标签: c++ system call

我需要在linux中找到系统调用,以便在我的应用程序中发现连接的pendrive的文件系统。我发现'fdisk -l'完成了这项工作,但我现在需要了解这是如何发生的。我无法发现阅读fdisk代码,唯一可以认为是:

  1. 不使用结构statfs或statvfs;
  2. fdisk不需要挂载设备来查找文件系统;
  3. Obs:我的应用程序是用C ++编写的,并且在嵌入式Linux系统中运行。

2 个答案:

答案 0 :(得分:2)

命令fdisk -l显示由系统ID 字节表示的文件系统。该字节位于主引导记录(MBR)内的分区表中。 MBR通常存储在第一个硬盘上的第一个气缸上(尽管任何硬盘都可以有MBR)。

我认为你可以简单地使用open和read系统调用来从磁盘读取MBR,假设运行程序的用户有权限:

char buf[446];
int fd = open("/dev/hda", O_RDONLY);
read(fd, buf, 446);

查看MBR Format,然后读出分区表以获取系统ID字节。这是系统ID字节的list of types

我只知道Linux上的fdisk如何工作,上次我检查它不支持GPT或任何其他分区格式。所以这个答案只与经典的MBR格式有关。

答案 1 :(得分:1)

您可以使用libblkid中的util-linux来执行此操作。源代码分发包括一个列出指定设备上分区的示例,包括文件系统类型。