首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Linux中检测C++中SD卡的存在

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

Stack Overflow用户
提问于 2016-02-23 20:58:04
回答 2查看 6.1K关注 0票数 2

下午好,

我正在运行一个简单的循环,以检查SD卡是否已插入或删除,但它似乎始终不能正常工作。

问题是,当程序以插入SD卡开始时,if(f.good())语句是True。

当SD卡被删除时,这条语句是False。

然而,当SD卡被重新插入时,这个语句仍然是False.

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

谢谢。

我的循环如下所示

代码语言:javascript
复制
    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));
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-23 21:57:33

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

在您的例子中,它应该是类似于/sys/block/mmcblk1/size的地方。该文件应该始终存在,并包含一个unsigned long long值。如果它是0,那么没有媒体,如果它是>0,那么您就有一个这样大小的媒体。

代码语言:javascript
复制
bool has_media()
{
    std::ifstream fsize("/sys/block/mmcblk1/size");
    unsigned long long size;
    return (fsize >> size) && (size > 0);
}

如果您需要适当的媒体插入/删除通知,而不需要/不能使用libudev,则需要使用uevent和netlink套接字,而不是轮询和休眠。请参阅此excelent answer及其详细信息。

票数 7
EN

Stack Overflow用户

发布于 2020-12-12 02:26:31

如果sd卡是唯一的FAT32分区,您可以简单地这样做:

代码语言:javascript
复制
fdisk -l | grep FAT32 | cut -c 1-8
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35588026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档