Speicher vor fread() leeren?



  • Hallo!

    Ich habe folgendes Problem:

    Ich lese eine Datei vom USB-Stick ein und nehme die Zeit.
    Den so gefüllten Buffer schreibe ich in eine andere Datei auf demselben Stick und nehme wieder die Zeit.

    Nach einem SYSTEM-NEUSTART und erster ausführung des Programms bekomme ich die erwarteten Werte (Lesegeschwindigkeit etwa 1/2 Schreibgeschwindigkeit).

    Führe ich das Programm erneut aus, wird der Leseprozess nach einem Bruchteil der Zeit abgeschlossen. (Auch nachdem die Datei zwischendurch umbenannt wurde...)

    Weiß jemand, wie ich verhindern kann, dass die Daten im Speicher bis zum Neustart gehalten werden?

    Vielen Dank!

    mfg,

    TMoe



  • Das ist der Platten-Cache.
    Kann vom System und/oder von der Platte/Stick sein.

    USB-Stick abmelden und wieder anstöpseln.



  • Ok. Vielen Dank erstmal.

    Etwas in der Richtung dachte ich mir. Aber gibt es eine Möglichkeit, dies aus dem Code heraus zu "reseten" ?



  • CreateFile()+Read/WriteFile()+CloseHandle()
    Beim erstellen/öffnen kann man das Flag FILE_FLAG_NO_BUFFERING angeben, welches zumindest Windows dazu veranlässt nicht zu puffern.



  • Hey. Das stimmt. Ich habe die Funktion bisher nicht richtig wahrgenommen, dar ich mich am liebsten auf ANSI C/C++ beschränken wollte. Der Code sollte zu Vergleichszwecken mit so wenig Änderungen wie möglich sowohl auf Windows Embedded C 7 und einem embedded Linux laufen...

    Aber vielleicht muss ich da einfach doch zwischen den beiden Versionen mehr modifizieren...

    Danke!