繁体   English   中英

如何在 Linux 中的 C++ 中检测 SD 卡的存在

[英]How to detect SD card presence in C++ In Linux

下午好,

我正在运行一个简单的循环来检查 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));
    }

了解可移动设备是否插入了媒体的正确直接方法是从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 套接字。 请参阅此优秀答案的详细信息。

如果 SD 卡是唯一的 FAT32 分区,您可以简单地执行以下操作:

fdisk -l | grep FAT32 | cut -c 1-8

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM