#c #linux #eclipse #ubuntu #g
#c #linux #eclipse #ubuntu #g
Вопрос:
Я ищу какую-нибудь функцию, которая вернет общую емкость карты micro SD, подключенной к /dev / sdb. Меня не так волнует свободное пространство, я забочусь об общей емкости диска. Мне нужна надежная и точная функция. Если такового не существует, как мне его создать?
Спасибо!
Комментарии:
1. Вы имеете в виду необработанную емкость устройства или емкость файловой системы? Емкость FS будет меньше, чем общий размер базового устройства.
2. Из-за названия я так и хочу сказать
const char* const getMicroSDSize() { return "15 mm × 11 mm × 1.0 mm"; }
3. @sehe: сделайте это 0,7 мм вместо 1,0 🙂
4. @ott —: не стесняйтесь исправлять (?) Запись в Википедии, на которую я ссылался…
5. @sehe: Я постараюсь это добавить. Эта немецкая страница ( de.wikipedia.org/wiki/MicroSD ) тоже может быть неполным, но там написано 0.7 — а Micro-SD в моих пальцах наверняка меньше 1.0мм — я сообщу позже.
Ответ №1:
strace for blockdev
говорит мне, что вы могли бы использовать:
#include <iostream>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
int main()
{
unsigned long long size;
int fd = open("/dev/sdx", O_RDONLY);
ioctl(fd, BLKGETSIZE64, amp;size);
std::cout << size << std::endl;
std::cout << (size>>20) << std::endl; // MiBytes
}
(замените sdx именем узла устройства)
Примечание предпочитайте использовать uint64_t
, если ваш компилятор уже поддерживает его (включает <cstdint>
)
Ответ №2:
Вы можете просто прочитать специальный файл в /sys/
каталоге:
/sys/block/sdb/sdb1/size
Он возвращает размер в байтах.
Комментарии:
1. ‘size’ возвращается в блоках, чтобы получить фактический размер, вы должны умножить это значение на размер блока (обычно 512 байт).