Форматирование SD-карты в Linux из приложения C ++ без использования системы - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть приложение, в которое я записываю данные на съемный носитель (SD-карта / Pendrive). Теперь я хочу добавить функциональность, позволяющую форматировать SD-карту в случае, если она не смонтирована должным образом или по какой-либо причине повреждена.

Я знаю, что могу использовать метод system () для вызова базовой утилиты, такой как mkfs .ext4 для форматирования съемного раздела, как мы делаем через терминал, или сценарий bash, который размонтирует, отформатирует и перемонтирует съемный носитель. Но я бы хотел избежать вызова system (), потому что:

Он порождает новую оболочку, над которой я не буду иметь никакого контроля. В этом конкретном случае я не могу проверить состояние размонтирования / форматирования / перемонтирования, что мешает мне правильно обрабатывать ошибки в приложении. Существует ли системная библиотека, которую я могу использовать для выполнения той же задачи способом C ++ (используя API / вызовы методов) вместо необходимости вызывать system () и затем скрипт bash внутри.

Пожалуйста, исправьте, если я что-то неправильно понял.

Пожалуйста, предложите.

Спасибо

1 Ответ

0 голосов
/ 09 февраля 2020

Я бы начал с пакетов 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 и block. Кроме того, 'mke2fs' также должен инициализировать таблицы inode, очистив их нулями, создать каталоги root и lost + found и зарезервировать зарезервированные inode.

Цитата взята из сгенерированного сделать c снимка проекта (git репо https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git)

Я также нашел этот онлайн-файл PDF , если вы хотите иметь быстрый взгляд ...

...