1

我已经构建了一个 USB 数据记录棒,当插入以进行文件下载时,它显示为 USB 大容量存储设备。文件是离线记录的,但是当读取设备上的一个小(<512 字节,1 个磁盘扇区)特殊文件时,记忆棒可以返回有限的“实时”数据(设备时钟、电池电量、瞬时传感器值) - 基本上就像UNIX 设备文件。

读取和使用/显示记录器数据的应用程序是用 Python 编写的。

我认为我是一个聪明的家伙,直到我真正从这个文件中读取实时数据。事实证明,在 Windows 下(迄今为止在 XP 和 Win7 中测试过),只有从应用程序读取的第一次实际读取的是设备 - 尝试重新读取文件(扇区)会从初始读取返回过时的缓存数据,甚至 10 + 初始读取后的分钟,即使文件已关闭并重新打开,或者扇区已写入然后重新读取。通过 mmap() 访问文件数据也不会导致新的读取。随后的读取请求根本不会到达设备。我猜Windows“知道”它没有修改文件本身,所以文件内容不可能改变。

是否有任何健全的方法可以强制后续读取(最好通过“标准”Python 文件 I/O 调用)实际从设备返回新读取而不是缓存数据?

为了清楚起见,我特别指的是阻止 READ 缓存,而不是在写入后同步磁盘内容。

是否存在可以从 Python 中访问的类似内容?

4

1 回答 1

0

使 OS 磁盘读取缓存无效

使用 Python 的 win32 扩展应该允许您直接访问 CreateFile 调用以打开文件。您可以使用它来读取您的文件。

这里是Win32 扩展

于 2012-08-01T03:26:49.870 回答