2

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

  1. 不使用结构 statfs 或 statvfs;
  2. fdisk 不需要挂载设备来查找文件系统;

Obs:我的应用程序是用 C++ 编写的,并且在嵌入式 linux 系统中运行。

4

2 回答 2

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 格式,然后读出分区表以获取系统 ID 字节。这是系统 ID 字节的类型列表。

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

于 2012-09-19T22:38:14.583 回答
1

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

于 2012-09-19T22:04:50.270 回答