2015-03-25 15 views
5

Gibt es eine Möglichkeit, einen Puffer in Datei atomar zu dumpen?Atomic-Schreiben in Datei unter Linux

Mit "atomar" meine ich: wenn zum Beispiel jemand meine Anwendung während des Schreibens beendet, hätte ich gerne Datei im Zustand vor oder nach dem Schreiben, aber nicht in einem beschädigten Zwischenzustand.

Wenn die Antwort "Nein" ist, dann könnte es wahrscheinlich mit einem wirklich kleinen Puffer gemacht werden? Zum Beispiel, kann ich 2 konsequente int32_t Variablen mit einem einzigen 8-Byte-fwrite (auf x64-Plattform) ablegen, und sicher sein, dass diese beiden int32s oder keine von ihnen, aber nicht nur eine von ihnen?

+0

Ich denke, Sie müssen in Unix "Signale" suchen. Überfüllungssignale ermöglichen Ihnen zu wissen, wann Ihre App geschlossen wird. Das einzige, was Sie nicht entdecken können, ist ein 'kill -9', der Ihr Programm herunterlädt, ohne ein Signal auszugeben. –

+11

Eine übliche Problemumgehung besteht darin, an einer Kopie der Datei zu arbeiten und sie am Ende atomar zu vertauschen. –

+3

Vereinbaren Sie mit @MarcGlisse der einzige garantierte Weg, um Korruption zu verhindern, ist eine neue Datei zu schreiben und die neue Datei auf die alte zu verschieben, da die Umbenennung atomar ist. –

Antwort

0

Es kann sich lohnen, signal.h (Standard-C-Bibliothek) zu überprüfen, um solche Situationen zu behandeln. Beachten Sie, dass das Einfädeln möglicherweise zusätzliche Schutzvorrichtungen erfordert.