2015-03-25 21 views
5

Czy istnieje sposób na zrzucenie bufora do pliku atomowo?Atomowe zapisywanie do pliku na Linuksie

Przez "atomowo" mam na myśli: jeśli na przykład ktoś wypowie mój wniosek podczas pisania, chciałbym mieć plik w stanie przed lub po napisaniu, ale nie w uszkodzonym stanie pośrednim.

Jeśli odpowiedź brzmi "nie", to prawdopodobnie można to zrobić przy użyciu naprawdę małych buforów? Na przykład, czy mogę zrzucić 2 kolejne zmienne int32_t z jednym 8-bajtowym plikiem fwrite (na platformie x64) i upewnić się, że oba te int32 są zrzucone, czy też żadna z nich, ale nie tylko jedna z nich?

+0

Myślę, że trzeba zajrzeć do "sygnałów" unix. Odłamywanie sygnałów pozwoli ci wiedzieć, kiedy twoja aplikacja jest zamykana. Jedyne, czego nie możesz wykryć, to 'kill -9', który usuwa twój program bez wysyłania sygnału. –

+11

Zwykłym obejściem jest praca nad kopią pliku i zamiana ich atomowo na końcu. –

+3

Zgadzam się z @MarcGlisse jedynym gwarantowanym sposobem zapobiegania korupcji jest napisanie nowego pliku i przeniesienie nowego pliku do starego, ponieważ zmiana nazwy jest atomowa. –

Odpowiedz

0

Warto sprawdzić system signal.h (standardowa biblioteka c), aby poradzić sobie z takimi sytuacjami. Pamiętaj, że wątki mogą wymagać dodatkowych zabezpieczeń.