我正在尋找一些函數,它會返回掛載到/ dev/sdb的micro SD卡的總容量。我並不關心可用空間,而是關心驅動器的總容量。我需要一個可靠和準確的功能。如果不存在,我將如何去創建一個?通過C++獲取micro SD卡的大小
謝謝!
我正在尋找一些函數,它會返回掛載到/ dev/sdb的micro SD卡的總容量。我並不關心可用空間,而是關心驅動器的總容量。我需要一個可靠和準確的功能。如果不存在,我將如何去創建一個?通過C++獲取micro SD卡的大小
謝謝!
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>
)
你可以只是讀的/sys/
目錄中一個特殊文件:
/sys/block/sdb/sdb1/size
它返回的大小以字節爲單位。
'size'以塊的形式返回,爲得到實際大小,您應該將該值乘以塊大小(通常爲512字節)。 – starfry
您的意思是原始設備容量或文件系統容量? FS容量將小於底層設備的總容量。 –
由於標題我很想說['const char * const getMicroSDSize(){return「15 mm x 11 mm x 1.0 mm」; }'](http://en.wikipedia.org/wiki/Secure_Digital#Physical_size) – sehe
@sehe:使0.7mm代替1.0 :-) –