下午好,
我正在运行一个简单的循环来检查SD卡是否已插入或移除,但它似乎无法一直正常工作。
问题是,当程序以插入SD卡开始时, if(f.good())语句为 True 。
删除SD卡时,此声明为 False 。
但是,重新插入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));
}
答案 0 :(得分:3)
了解可移动设备是否插入媒体的正确直接方法是从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并附上详细信息。
答案 1 :(得分:0)
如果sd卡是唯一的FAT32分区,则只需执行以下操作:
window.bootstrap = require('bootstrap/dist/js/bootstrap.bundle.js');