0

我有一个带 SD 读卡器的 debian linux 盒子。当 SD 卡不存在时,我似乎可以(在一定程度上)进行文件 IO。我需要一种方法来确保我正在读取的文件实际上是卡上的文件,而不是来自缓存的文件。

详细信息:如果我将文件放在 SD 卡上并读取它:

#!/bin/bash
if [-e "/media/usb3/disk_id"]
   id=`cat /media/usb3/disk_id`
   logger "disk id: $id"
else
   logger "not there"
fi

如果我插入带有“disk_id”文件的磁盘,则此方法有效(IE 预期行为)。如果我移除 SD 卡,它会继续工作......或者放入另一张没有文件的卡。

我可以使用来检测 SD 卡的存在/不存在,blkid -d /dev/null但我不确定如何绕过操作系统正在执行的缓存。

建议?

4

1 回答 1

0

如果您在未正确卸载设备的情况下移除设备,您将观察到此行为。你真的无能为力。至少没有什么简单的。

您可以尝试通过向其写入内容(可能创建一个新文件)然后调用fsync. 如果块设备不再存在,则 fsync 将失败。

不过,我不确定如何在 bash 脚本中执行此操作。

您应该确保在没有先卸载 SD 卡的情况下不弹出 SD 卡。

于 2013-06-30T05:49:25.320 回答