I am looking for some function that will return the total capacity of a micro SD card mounted to /dev/sdb. I do not care so much about free space I care about total capacity of the drive. I need a reliable and accurate function. If there is none in existence how would I go about creating one?
Thanks!
strace for blockdev
tells me you could use:
#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
}
(replace sdx by device node name)
Note prefer using uint64_t
if your compiler supports it already (include <cstdint>
)
You can just read a special file in the /sys/
directory:
/sys/block/sdb/sdb1/size
It returns the size in bytes.