下午好,
我正在运行一个简单的循环,以检查SD卡是否已插入或删除,但它似乎始终不能正常工作。
问题是,当程序以插入SD卡开始时,if(f.good())语句是True。
当SD卡被删除时,这条语句是False。
然而,当SD卡被重新插入时,这个语句仍然是False.
在C++中是否有更可靠的方法来检测SD卡的存在?我正在运行Linux,基于OpenEmbedded。我倾向于避免使用任何外部库,并在可能的情况下使用文件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));
}发布于 2016-02-23 21:57:33
了解可移动设备是否插入媒体的正确直接方法是从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及其详细信息。
发布于 2020-12-12 02:26:31
如果sd卡是唯一的FAT32分区,您可以简单地这样做:
fdisk -l | grep FAT32 | cut -c 1-8https://stackoverflow.com/questions/35588026
复制相似问题