2011-10-19 15 views
1

私は/ dev/sdbにマウントされたマイクロSDカードの総容量を返す機能を探しています。私はフリースペースについてあまり気にしませんドライブの合計容量を気にします。私は信頼できる正確な機能が必要です。存在していない場合は、どのように私は1つを作成するつもりですか?C++経由でマイクロSDカードのサイズを取得

ありがとうございます!

+0

ローデバイス容量またはファイルシステム容量を意味しますか? FSの容量は、基盤となるデバイスの合計サイズより小さくなります。 –

+4

タイトルのために、私は['const char * const getMicroSDSize(){return" 15 mm×11 mm×1.0 mm "; } [](http://en.wikipedia.org/wiki/Secure_Digital#Physical_size) – sehe

+0

@sehe:0.7mmではなく、1.0 :-)にする –

答えて

4

straceのは、あなたが使用することができます私に語った:あなたのコンパイラは(<cstdint>を含める)

すでにそれをサポートしている場合

#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を使用して好みます

1

あなただけ/sys/ディレクトリに特別なファイルを読むことができます:

/sys/block/sdb/sdb1/size 

それはサイズをバイト単位で返します。 blockdevため

+0

'size'がブロックで返され、実際のサイズを取得するには、この値にブロックサイズ(通常は512バイト)を掛ける必要があります。 – starfry

関連する問題