Я пытаюсь получить ярлык USB-накопителя в моем приложении c / c ++. Я использую libudev, чтобы получить детали usb. Но это не обеспечивает метки дисков. Есть ли у кого-нибудь представление о том, как получить ярлык диска. Я работаю на встроенной платформе, у нее нет папки / dev / disk.
Пожалуйста помоги.
Версия ядра: 3.3.8
Обычно файловая система usb имеет раздел vfat, чтобы сделать ее совместимой между архитектурами msdos, windows, linux и mac.
Метка является свойством файловой системы vfat. Обычно он отображается как первая запись в корневом каталоге и помечается как метка файловой системы. Недавние реализации файловых систем msdos (просто vfat exfat и fat32) записывают его также в фиксированную часть загрузочной записи для этого раздела, так что вы можете прочитать ее оттуда.
У вас есть серийный номер тома со смещением 0x43 (4 байта) в первом секторе раздела.
У вас также есть копия метки тома со смещением 0x47 в этом первом секторе (длина 11 байтов).
Хитрость в том, что, как правило, USB-флешка разделена (только с одним разделом), вам необходимо:
Будьте осторожны, чтобы NTFS не использовала это место для этой цели, и вы можете повредить запись NTFS. Просто читайте с того места.
Кроме того, не пытайтесь писать в это место даже в файловых системах vfat, так как они также поддерживают копию метки тома в корневом каталоге файловой системы.
Самый простой способ получить метку файловой системы dos (и ext [234], ntfs и т. Д.) В linux — это с помощью команды BLKID (8) это дает следующий вывод:
/dev/sda1: UUID="0b2741c0-90f5-48d7-93ce-6a03d2e8e9aa" TYPE="ext4"/dev/sda5: UUID="62e2cbf2-d847-4048-856a-a90b91116285" TYPE="crypto_LUKS"/dev/mapper/sda5_crypt: UUID="vnBDh3-bcaR-Cu7E-ok5D-oeFp-5SyP-MmAEsb" TYPE="LVM2_member"/dev/mapper/my_vg-root: UUID="1b9f158b-35b5-490e-b914-bdc70e7f5c28" TYPE="ext4"/dev/mapper/my_vg-swap_1: UUID="36b8ac81-7043-42ae-9f2a-908d53e2a2b3" TYPE="swap"/dev/sdb1: LABEL="K003_1G" UUID="641B-80BF" TYPE="vfat"
Как вы можете видеть, последняя запись предназначена для vfat usb pendrive, но вы должны проанализировать этот вывод (я думаю, это не сложно сделать)
Я считаю, что «метка» диска — это свойство, поддерживаемое используемой файловой системой, то есть оно не на уровне USB.
Вам понадобится правильная реализация файловой системы, то есть «монтирование» диска.
Ты можешь использовать BLKID чтобы прочитать этикетку USB-устройства:
blkid USB_PATH | grep -o ""LABEL.*"" | cut -d'\"' -f2