Получение размера карты micro SD с помощью C

#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 байт).