Virtuelles Laufwerk für Logfiles

Gast #3079887
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 !
#3080408
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...
Gast #3080411
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.
#3082254
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren