![](/img/trans.png)
[英]Formatting SD card in Linux from C++ application without using system
[英]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.