2013-06-28 72 views
0

我有一個SD卡讀卡器的Debian Linux機箱。看起來我可以在SD卡不存在的情況下執行文件IO(至某點)。我需要一種方法來確保我正在閱讀的文件實際上是卡上的文件,而不是緩存中的文件。測試sd卡上的文件 - 緩存?

細節:如果我把一個文件在SD卡上,並閱讀:

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

這個工程(IE預期的行爲),如果我插入與它的「disk_id」文件的磁盤。 但是如果我取出SD卡,它會繼續工作......或者放入另一張沒有該文件的卡。

我可以使用blkid -d /dev/null來檢測SD卡的存在/缺失,但我不知道如何解決該操作系統正在執行的緩存。

對此提出建議?

+0

在拔出之前是否卸下了卡? –

+0

不是。這是測試用例的一部分。 – ethrbunny

+2

當介質被移除時,操作系統需要刷新內存中的結構。當操作系統對它撒謊時,你無法合理地期望你的軟件能夠正常工作。 –

回答

0

如果您在未正確卸載設備的情況下卸下設備,您將會觀察到此行爲。對此你無能爲力。至少沒有什麼簡單的。

您可以嘗試通過向其寫入內容(可能創建一個新文件)來檢測塊設備是否存在,然後調用fsync。如果塊設備不在那裏,則fsync將失敗。

雖然我不確定如何在bash腳本中做到這一點。

您應該確保您不要先卸下SD卡才彈出SD卡。