Hallo, ich habe hier ein Programm, das sehr viele Logausgaben (jewiels mit fopen / fclose) generiert. Um die Festplatte zu schonen, würde ich gerne die Zahl der Zugriffe reduzieren, indem ich die Logausgaben auf ein virtuelles Laufwerk im Arbeitsspeicher schreibe und erst am Ende die komplette Logdatei in einem Rutsch auf die Festplatte kopiere. Hat jemand dazu einen Tipp ? THX !
Nachtrag : Der Titel muss natürlich heissen "Virtuelles Laufwerk für Logfiles"
Und was machst Du im Falle eines Crashes mit dem noch im RAM liegenden Logfile? Aber eigentlich ist das den Festplatten einigermaßen egal, und das Betriebssystem bringt auch einen Schreibcache mit, so daß schon von Hause aus nicht jedes Byte einzeln auf die Platte geschrieben wird. Ich würd sagen kümmer dich nicht um sowas...
Handelt es sich um einen Flash-Speicher oder sonstiges, der nicht viele Schreibvorgänge verträgt? Ansonsten hielte ich es für übertrieben, an solchen Zugriffen zu sparen. Wie dem auch sei. Als erstes fiele meine Wahl darauf, auf dem System eine "echte" RAM-Disk anzulegen, z. B. tmpfs auf Unixoiden, auf Win* gibts das auch. Dann brauchst Du im Programm nichts ausser evtl. den Pfad zu ändern und alles geht seinen gewohnten Weg. Ist das nicht möglich, oder zu wenig portabel, schreibe die Log-Meldungen halt einfach in eine Datenstruktur im RAM. Mache ein Struct a la
1 | typedef struct { |
2 | time_t timestamp; |
3 | int status; |
4 | char msg[256]; |
5 | } LogMsg; |
und dann mache ein Array draus. Die Größe des Arrays bemisst Du halt sinnvoll und das speichert dann deine Log-Funktion ab und zu mal ab.
Hast leider nicht zum OS gesagt, aber nichts desto Troz kansnt du die Syslog Techniken auf dem GNU/Linux umfeld anschauen. Da wird bei nicht Kritischen geschichten auch mit einem verzögertem Write auf die Platte geschoben.
In der Datei "/etc/fstab" folgenden Eintrag hinzufügen: tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 oder tmpfs /home/username/tmp tmpfs defaults,noatime,mode=1777 0 0 oder tmpfs /var/log tmpfs defaults,noatime,mode=0755 0 0 Wenn ich meine Programme kompiliere mache ich das in einem temporären Dateisystem, man muss aber darauf achten dass die Daten nach dem Neustart wieder weg sind, also wenn du die Daten retten möchtest müssen sie vor dem runter fahren kopiert werden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.