c - mount() 上的自动检测文件系统

标签 c linux filesystems mount

我的应用程序应该挂载和检查插入 USB 插槽的任何 pendrive 的内容。 问题是,某些用户可能正在使用针对标准“vfat”以外的其他文件系统格式化的 pendrives。 标准

 mount /dev/sda1 /mnt/pendrive -t auto

足以满足我的需求 - 它可以工作,并且将使用内核可读的任何文件系统。 问题是我必须从应用程序内部执行此操作,并且当存在“自然”C 解决方案时,我宁愿避免调用 system() 和 shell 命令。

 #include <sys/mount.h>
 ...
 result = mount("/dev/sda1", "/mnt/pendrive", "vfat" ,0, NULL);

正常工作。但是,如果我将 "vfat" 替换为 "auto"NULL,则不会安装任何内容。

当我检查 busybox 挂载的来源时,如果提供“auto”或未提供文件系统类型,它似乎在 mount() 调用中将文件系统设置为 NULL。但是这个技巧似乎对我不起作用。我错过了什么?有没有一些相对简单的方法可以做到这一点?

最佳答案

内核无法自动检测文件系统,所以你必须自己做。

busybox 实际上所做的只是遍历所有相关的文件系统,从/proc/filesystems 解析,然后调用 mount() 直到成功(参见行 1898)

关于c - mount() 上的自动检测文件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11397813/

相关文章:

c - Linux C 中循环中的 fork 和管道进程

linux - 命令 "r--"命令的 UNIX Shell 脚本问题未找到

linux - $* 和 $@ 有什么区别

hadoop - HDFS 中的文件大小应该是多少才能获得最佳 MapReduce 作业性能

c - 嵌套 C 宏、CRC 计算、Eclipse Java 崩溃

c - 链表追加中指针的指针

c - nrf51 定时器驱动程序代码错误

linux - 将 awk 日志保存在尾部后的命令

linux - 使用 O_DIRECT 写入时是否需要使读取缓存失效/丢弃?

dll - 使 DLL 保持最新的方法