通过 C++ 获取 micro SD 卡的大小
Posted
技术标签:
【中文标题】通过 C++ 获取 micro SD 卡的大小【英文标题】:Getting the size of a micro SD card via C++ 【发布时间】:2011-10-19 23:08:57 【问题描述】:我正在寻找一些函数,它将返回安装到 /dev/sdb 的微型 SD 卡的总容量。我不太关心可用空间,我关心驱动器的总容量。我需要一个可靠且准确的函数。如果不存在,我将如何创建一个?
谢谢!
【问题讨论】:
您是指原始设备容量还是文件系统容量? FS 容量将小于底层设备的总大小。 由于标题我很想说const char* const getMicroSDSize() return "15 mm × 11 mm × 1.0 mm";
@sehe: 把 0.7mm 改成 1.0 :-)
@ott--: 随意更正 (?) 我链接到的***条目...
@sehe:我会尝试添加它。这个德文页面 (de.wikipedia.org/wiki/MicroSD) 也可能不完整,但它显示 0.7 - 我手指中的 Micro-SD 肯定小于 1.0 毫米 - 我稍后会报告。
【参考方案1】:
blockdev
的 strace 告诉我你可以使用:
#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>
),则更喜欢使用它
【讨论】:
【参考方案2】:您可以只读取/sys/
目录中的特殊文件:
/sys/block/sdb/sdb1/size
它以字节为单位返回大小。
【讨论】:
'size' 以块为单位返回,要获得实际大小,您应该将此值乘以块大小(通常为 512 字节)。以上是关于通过 C++ 获取 micro SD 卡的大小的主要内容,如果未能解决你的问题,请参考以下文章
java SD卡相关的工具类包括获取SD卡是否可用,剩余空间,总空间,剩余空间是否足够..当然你必须先申请访问SD卡的权限。