我有一个在可移动介质(SD卡/ pendrive)上写入数据的应用程序。现在,我想添加一个功能,我可以格式化SD卡,以防它没有正确安装或由于任何原因而损坏。
我知道我可以使用system()方法来调用一个底层的实用程序,比如mkfs.ext4来格式化可移动分区,就像我们通过终端所做的那样,或者调用一个bash脚本来卸载、格式化和重新装载可移动介质。但我希望避免调用system(),因为:
它会产生一个我无法控制的新shell。在这种情况下,我无法检查卸载/格式化/重新挂载的状态,这会阻止我在应用程序中正确处理错误。有没有一个系统库可以用来以C++的方式完成相同的任务(使用API/方法调用),而不是调用system(),然后在里面调用bash脚本。
如果我误解了什么,请纠正。
请提个建议。
谢谢
发布于 2020-02-09 11:34:42
我将从libext2fs-dev和e2fslbs-dev包开始(请参阅ext2fs/ext2fs.h中的函数ext2fs_initialize
)。
This是linux发行版用来处理这类文件系统的工具,但是文档有点稀缺:
2.1.3初始化文件系统
'mke2fs‘程序正在初始化ext2文件系统。这里描述的两个函数'ext2fs_initialize‘和'ext2fs_allocate_tables’完成了设置文件系统的大部分初始工作。然而,它们并不能完成所有的工作。'mke2fs‘调用'ext2fs_initialize’来设置文件系统超级块,并调用'ext2fs_allocate_tables‘来为inode表以及inode和块位图分配空间。此外,'mke2fs‘还必须通过用零清除inode表来初始化inode表,创建根目录和lost+found目录,并保留保留的inode。
报价来自项目快照的生成文档(git repo https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git)
我还找到了this online pdf file如果你想看一眼的话...
https://stackoverflow.com/questions/60135243
复制