Forum: PC-Programmierung Virtuelles Laufwerk für Logfiles


von interrupt (Gast)


Lesenswert?

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 !

von interrupt (Gast)


Lesenswert?

Nachtrag : Der Titel muss natürlich heissen

"Virtuelles Laufwerk für Logfiles"

von Ben _. (burning_silicon)


Lesenswert?

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...

von gunnar kleinmaus (Gast)


Lesenswert?

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.

von Marc (gierig) Benutzerseite


Lesenswert?

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.

von Hans J. (step_up_mosfet)


Lesenswert?

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
Noch kein Account? Hier anmelden.