Как программно обнаружить файловую систему без монтирования устройства (как & quot; fdisk -l & quot;)

Мне нужно найти системный вызов в Linux, чтобы обнаружить файловую систему подключенного Pendrive в моем приложении. Я обнаружил, что ‘fdisk -l’ выполняет эту работу, но теперь мне нужно выяснить, как это происходит. Я не был способен обнаружить чтение кода fdisk, единственная надежда на это:

  1. Структуры statfs или statvfs не используются;
  2. Fdisk не нужно монтировать устройство, чтобы найти файловую систему;

Obs: Мое приложение написано на C ++ и работает во встроенной системе Linux.

2

Решение

Команда fdisk -l отображает файловую систему, представленную Системный идентификатор байт. Этот байт находится в таблице разделов, которая находится внутри основной загрузочной записи (MBR). MBR обычно хранится в первом цилиндре на первом жестком диске (хотя любой жесткий диск может иметь MBR).

Я думаю, вы могли бы просто использовать системные вызовы open и read для чтения MBR с диска, предполагая, что у пользователя, запускающего вашу программу, есть разрешение:

char buf[446];
int fd = open("/dev/hda", O_RDONLY);
read(fd, buf, 446);

Посмотри на Формат MBR и затем считайте таблицу разделов, чтобы получить байты идентификатора системы. Вот список типов для байта идентификатора системы.

Я знаю только о том, как работает fdisk в Linux, и в прошлый раз я проверял, что он не поддерживает GPT или какие-либо другие форматы разделов. Так что этот ответ относится только к классическому формату MBR.

2

Другие решения

Ты можешь использовать libblkid от Util-Linux сделать это. Исходный дистрибутив включает в себя пример, в котором перечислены разделы на указанном устройстве, включая тип файловой системы.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector