2010-05-04 9 views
5

Projektuję system, który będzie zapisywać dane szeregów czasowych do pliku. Dane to bloki 8 bajtów podzielone na dwie 4 bajty części, czas i ładunek.Czy atom jest WriteFile?

Według MSDN funkcja WriteFile jest atomowa (http://msdn.microsoft.com/en-us/library/aa365747(VS.85).aspx), jeśli zapisane dane mają mniejszy rozmiar niż sektor.

Ponieważ plik będzie zawierał tylko te bloki (nie ma "struktury" pliku, więc nie można odtworzyć uszkodzonego pliku), dodane jeden po drugim, ważne jest, aby cały blok, lub nic nie jest napisane do pliku przez cały czas.

Pytanie brzmi, czy zrozumiałem poprawnie, że plik zapisu mniejszy niż rozmiar sektora jest zawsze zapisywany całkowicie na dysku lub w ogóle nie jest zapisany, bez względu na to, co dzieje się podczas faktycznego wywołania pliku zapisu?

Odpowiedz

6

WriteFile jest atomowe, o ile zapis nie przekracza granicy sektora w pliku. Jeśli więc rozmiar sektora wynosi 512 bajtów, zapisanie 20 bajtów począwszy od przesunięcia pliku 0 będzie atomowe, ale te same dane zapisane w pliku 500 przesunięcia nie będą atomowe. W twoim przypadku zapisy powinny być atomowe, ponieważ rozmiar sektora powinien być wielokrotnością 8.

This MSDN blog ma więcej informacji o tym, jak wykonać atomowy zapis wielosektorowy bez korzystania z transakcji NTFS.

+0

Czy jest atomowy tak długo, jak maszyna jest w stanie zdrowego? (np. jeśli proces może ulec awarii, ale jądro jest utrzymywane w dobrym stanie, to czy jest atomowe?) – Mehrdad