簡體   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