私は/ dev/sdbにマウントされたマイクロSDカードの総容量を返す機能を探しています。私はフリースペースについてあまり気にしませんドライブの合計容量を気にします。私は信頼できる正確な機能が必要です。存在していない場合は、どのように私は1つを作成するつもりですか?C++経由でマイクロSDカードのサイズを取得
ありがとうございます!
私は/ dev/sdbにマウントされたマイクロSDカードの総容量を返す機能を探しています。私はフリースペースについてあまり気にしませんドライブの合計容量を気にします。私は信頼できる正確な機能が必要です。存在していない場合は、どのように私は1つを作成するつもりですか?C++経由でマイクロSDカードのサイズを取得
ありがとうございます!
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
を使用して好みます
あなただけ/sys/
ディレクトリに特別なファイルを読むことができます:
/sys/block/sdb/sdb1/size
それはサイズをバイト単位で返します。 blockdev
ため
'size'がブロックで返され、実際のサイズを取得するには、この値にブロックサイズ(通常は512バイト)を掛ける必要があります。 – starfry
ローデバイス容量またはファイルシステム容量を意味しますか? FSの容量は、基盤となるデバイスの合計サイズより小さくなります。 –
タイトルのために、私は['const char * const getMicroSDSize(){return" 15 mm×11 mm×1.0 mm "; } [](http://en.wikipedia.org/wiki/Secure_Digital#Physical_size) – sehe
@sehe:0.7mmではなく、1.0 :-)にする –