Получение размера микро SD-карты через C ++ - PullRequest
1 голос
/ 20 октября 2011

Я ищу какую-нибудь функцию, которая возвращает общую емкость карты micro SD, установленной в / dev / sdb.Меня не волнует столько свободного места, сколько общая емкость накопителя.Мне нужна надежная и точная функция.Если бы его не было, как бы я его создал?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 20 октября 2011

strace для 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, &size);

    std::cout << size << std::endl;
    std::cout << (size>>20) << std::endl; // MiBytes
}

(заменить sdx именем узла устройства)

Примечание предпочитают использовать uint64_t, если ваш компилятор уже поддерживает это (включая <cstdint>)

1 голос
/ 20 октября 2011

Вы можете просто прочитать специальный файл в каталоге /sys/:

/sys/block/sdb/sdb1/size

Возвращает размер в байтах.

...