【问题标题】:Linux system call to discover the filesystem of a device用于发现设备文件系统的 Linux 系统调用
【发布时间】:2012-09-18 20:00:24
【问题描述】:

我的问题如下:我需要获取设备的文件系统(在我的情况下是 pendrive)才能使用此信息。我的应用程序在 Linux 嵌入式系统中运行,我只想接受具有 FAT 和 FAT32 文件系统的笔式驱动器来执行文件导出。我搜索了互联网,但我没有找到我需要的系统调用。 关于源代码,我的应用程序是用 C++ 编写的。

我已经使用了 struct statfs,但是经过测试,我发现当我使用 NTFS 和 FAT32 格式的 pendrive 时,字段 f_type 的值是相同的。测试的输出是值 0x1021994。

我知道可以发现文件系统,“fdisk -l”命令可以完成这项工作,但是我无法在 fdisk 代码中弄清楚如何。

【问题讨论】:

  • 我完全不确定您拒绝 U 盘上的非 VFAT 文件系统是否正确。我发现用 Ext3(或 Ext4)文件系统格式化我的 U 盘非常有用。

标签: linux filesystems system


【解决方案1】:

您可以使用statfssystem call,它在返回的struct statfs中包含uint32_t f_type; /* type of filesystem */


请注意,正如 JoshuaRLi 指出的那样,statfs 现在已被 statvfs 弃用 - 而 struct statvfs 确实不是 包含一个 f_type 字段。

【讨论】:

【解决方案2】:

最简单的方法是:

1) 运行"mount" 命令列出一个或多个文件系统

2) 解析出你需要的信息

3) 您可以从"popen()" API 调用“mount”

PS:

还有一个"mount()" API,如果您愿意,它可以消除步骤 2) 和 3)。

Linux 是 Linux,可能还有至少六种其他可行的替代方案 - 你的选择 :)

【讨论】:

  • mount 命令只列出挂载的设备。在我的情况下,我需要在安装设备之前检查文件系统。
【解决方案3】:

也许你可以解析/proc/mounts 文件?

【讨论】:

    【解决方案4】:

    在挂载时指定文件系统类型(不要使用默认的-t auto)。如果您需要支持多种类型,请考虑全部尝试。

    【讨论】: