gpt4 book ai didi

linux - 如何在 Linux 中用 C++ 检测 SD 卡是否存在

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:42 26 4
gpt4 key购买 nike

下午好

我正在运行一个简单的循环来检查是否已插入或移除 SD 卡,但它似乎并不总是正常工作。

问题是,当程序在插入 SD 卡的情况下启动时,if(f.good()) 语句为 True

当 SD 卡被移除时,此声明是错误的

但是,当SD卡重新插入时,这个说法还是False

在 C++ 中是否有更可靠的方法来检测 SD 卡的存在?我正在运行基于 OpenEmbedded 的 Linux Yocto。我宁愿避免使用任何外部库,并尽可能使用文件 IO 或系统调用。

谢谢。

我的循环如下所示,

    while (running)
{
ifstream f("/dev/mmcblk1");
if (f.good()) {
f.close();
if (!mounted)
{
system("mount /dev/mmcblk1p1 /mnt/Storage");
mounted = true;
}
sdPresent = true;
}
else {
f.close();
sdPresent = false;
mounted = false;
}
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}

最佳答案

了解可移动设备是否插入了媒体的正确直接方法是从 sysfs 读取设备大小。

在你的情况下,它会像 /sys/block/mmcblk1/size 这样的地方。该文件应该始终存在,并且包含一个 unsigned long long 值。如果它是 0 则没有媒体,如果它是 >0 则您有该大小的媒体。

bool has_media()
{
std::ifstream fsize("/sys/block/mmcblk1/size");
unsigned long long size;
return (fsize >> size) && (size > 0);
}

如果您想要媒体插入/移除的适当通知而不是轮询和休眠,并且您不想/不能使用 libudev,那么您将需要使用 uevent 和 netlink 套接字。看这个excelent answer包含详细信息。

关于linux - 如何在 Linux 中用 C++ 检测 SD 卡是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35588026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com