Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash sd卡上文件的测试-缓存?_Bash_Debian_Sd Card - Fatal编程技术网

Bash sd卡上文件的测试-缓存?

Bash sd卡上文件的测试-缓存?,bash,debian,sd-card,Bash,Debian,Sd Card,我有一个带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 如

我有一个带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\u id”文件的磁盘,这是可行的(即预期的行为)。但是如果我移除SD卡,它会继续工作。。。或者换一张没有文件的卡

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


建议?

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

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

不过,我不知道如何在bash脚本中实现这一点


您应该确保在未先卸下SD卡的情况下不会弹出SD卡。

在拉出之前是否卸下SD卡?否。这是测试用例的一部分。卸下介质后,由操作系统刷新内存结构。当操作系统对它说谎时,你不能合理地期望你的软件正常工作。我会认为这是Linux中的一个bug,它应该在磁盘被移除时使缓存的文件无效,或者在读卡器(或者可能是它的驱动程序)中的一个错误,在那里读者不会传送磁盘被删除的事实。使用
sync
选项进行安装可能会有所帮助,但对于可穿戴闪存设备来说可能并不理想。