通过 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(包括&lt;cstdint&gt;),则更喜欢使用它

【讨论】:

【参考方案2】:

您可以只读取/sys/ 目录中的特殊文件:

/sys/block/sdb/sdb1/size

它以字节为单位返回大小。

【讨论】:

'size' 以块为单位返回,要获得实际大小,您应该将此值乘以块大小(通常为 512 字节)。

以上是关于通过 C++ 获取 micro SD 卡的大小的主要内容,如果未能解决你的问题,请参考以下文章

java SD卡相关的工具类包括获取SD卡是否可用,剩余空间,总空间,剩余空间是否足够..当然你必须先申请访问SD卡的权限。

用51单片机对SD卡通过SPI方式操作,怎样查看SD卡的剩余空间?

SD卡的技术说明

工业级SD卡与消费类的SD卡的区别在那?

怎么把sd卡改成tf卡?

从 stm32cubemx 创建的 FatFS 支持的 SD 卡的最大大小是多少