1

ファイルのダウンロード用に接続すると、USB大容量ストレージデバイスとして表示されるUSBデータロガースティックを作成しました。ファイルはオフラインで記録されますが、デバイス上の小さな(<512バイト、1ディスクセクター)特殊ファイルが読み取られると、スティックは限られた「ライブ」データ(デバイスクロック、バッテリー充電、瞬間センサー値)を返すことができます-基本的にはUNIXデバイスファイル。

ロガーデータを読み取って使用/表示するアプリケーションはPythonで書かれています。

このファイルから実際にライブデータを読みに行くまでは、私は賢い仲間だと思っていました。Windows(これまでのところXPとWin7でテスト済み)では、アプリケーションからの最初の読み取りのみが実際にデバイスから読み取られます-ファイル(セクター)を再読み取りしようとすると、最初の読み取りから古いキャッシュデータが返されます。 +最初の読み取りから数分後、ファイルを閉じて再度開いた場合、またはセクターが書き込まれてから再読み取りされた場合でも。また、mmap()を介してファイルデータにアクセスしても、新しい読み取りは発生しません。後続の読み取り要求は、単にデバイスに到達しません。Windowsは、ファイル自体が変更されていないことを「知っている」ので、ファイルの内容が変更されていない可能性があります。

後続の読み取り(できれば「標準」のPythonファイルI / O呼び出しを介して)を強制して、キャッシュされたデータではなく、デバイスからの新しい読み取りを実際に返すための適切な方法はありますか?

明確にするために、私は特に、書き込み後にディスクの内容を同期するのではなく、READキャッシュを阻止することを指します。

Python内からアクセスできるこのようなものはありますか?

4

1 に答える 1

0

OS ディスクの読み取りキャッシュを無効にする

Python の win32 拡張機能を使用すると、CreateFile 呼び出しに直接アクセスしてファイルを開くことができます。それを使用してファイルを読み取ることができる場合があります。

Win32 拡張機能は次のとおりです。

于 2012-08-01T03:26:49.870 に答える