繁体   English   中英

在不使用系统的情况下从 C++ 应用程序在 Linux 中格式化 SD 卡

[英]Formatting SD card in Linux from C++ application without using system

我有一个应用程序,我在可移动媒体(SD 卡/随身碟)上写入数据。 现在,我想添加一个功能,我可以在其中格式化 SD 卡,以防它未正确安装或因任何原因损坏。

我知道我可以使用 system() 方法调用像 mkfs.ext4 这样的底层实用程序来格式化可移动分区,就像我们通过终端或 bash 脚本来卸载、格式化和重新安装可移动媒体一样。 但我想避免 system() 调用,因为:

它会产生一个我无法控制的新外壳。 在这种特殊情况下,我无法检查卸载/格式化/重新安装的状态,这使我无法在应用程序中正确处理错误。 是否有一个系统库可以用来以 C++ 方式(使用 API/方法调用)执行相同的任务,而不必调用 system() 然后在其中调用 bash 脚本。

如果我误解了什么,请纠正。

请建议。

谢谢

我会从libext2fs-dev的和e2fslibs-dev的包开始(参见功能ext2fs_initialize中的ext2fs / ext2fs.h)。

是 linux 发行版用于处理此类文件系统的内容,但文档有点稀缺:

2.1.3 初始化文件系统

ext2 文件系统由“mke2fs”程序初始化。 这里描述的两个函数 'ext2fs_initialize' 和 'ext2fs_allocate_tables' 完成了设置文件系统的大部分初始工作。 然而,他们并没有完成全部工作。 'mke2fs' 调用 'ext2fs_initialize' 来设置文件系统超级块,并调用 'ext2fs_allocate_tables' 为 inode 表以及 inode 和块位图分配空间。 此外,'mke2fs' 还必须通过清零来初始化 inode 表,创建根目录和 lost+found 目录,并保留保留的 inode。

引用来自项目快照的生成文档(git repo https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git

如果您想快速浏览一下,我还找到了这个在线 pdf 文件...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM