2011-10-19 40 views
1

我正在尋找一些函數,它會返回掛載到/ dev/sdb的micro SD卡的總容量。我並不關心可用空間,而是關心驅動器的總容量。我需要一個可靠和準確的功能。如果不存在,我將如何去創建一個?通過C++獲取micro SD卡的大小

謝謝!

+0

您的意思是原始設備容量或文件系統容量? FS容量將小於底層設備的總容量。 –

+4

由於標題我很想說['const char * const getMicroSDSize(){return「15 mm x 11 mm x 1.0 mm」; }'](http://en.wikipedia.org/wiki/Secure_Digital#Physical_size) – sehe

+0

@sehe:使0.7mm代替1.0 :-) –

回答

4

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

你可以只是讀的/sys/目錄中一個特殊文件:

/sys/block/sdb/sdb1/size 

它返回的大小以字節爲單位。

+0

'size'以塊的形式返回,爲得到實際大小,您應該將該值乘以塊大小(通常爲512字節)。 – starfry