Linux系统调用发现设备的文件系统

3
我的问题如下:我需要获取设备的文件系统(在我的例子中是一个U盘)以使用这些信息。我的应用程序运行在一个嵌入式 Linux 系统中,我只想要接受带有 FAT 和 FAT32 文件系统的 U 盘进行文件导出。我搜索了互联网,但是没有找到我需要的系统调用。 关于源代码,我的应用程序是用 C++ 编写的。
我已经使用过 struct statfs,但是在测试后发现当我使用 NTFS 和 FAT32 格式化的 U 盘时,字段 f_type 的值是相同的。测试的输出为值 0x1021994。
我知道可以发现文件系统,"fdisk -l" 命令可以完成此工作,但是我无法在 fdisk 代码中找到如何实现。

我并不确定您拒绝在USB存储设备上使用非VFAT文件系统的做法是否正确。我发现使用Ext3(或Ext4)文件系统格式化我的USB存储设备非常有用。 - Basile Starynkevitch
4个回答

3
您可以使用 statfs 系统调用,其中返回的 struct statfs 包括 uint32_t f_type; /* 文件系统类型 */
请注意,正如JoshuaRLi所指出的那样,statfs现在已被弃用,而应使用statvfs ——并且struct statvfs不包括f_type字段。

请注意,statfs已被弃用,应使用statvfs - JoshuaRLi

0

最简单的方法是:

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

2)解析您需要的信息

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

附:

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

Linux作为Linux,也可能有至少半打其他可行的选择 - 由您决定 :)


mount 命令只列出已经挂载的设备。在我的情况下,我需要在挂载设备之前检查文件系统。 - rodolfo gomes dias

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

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接