2010-05-04 4 views
5

Я разрабатываю систему, которая будет записывать данные временных рядов в файл. Данные представляют собой блоки из 8 байт, разделенные на две части 4 байта, время и полезную нагрузку.Является ли WriteFile атомарным?

В соответствии с MSDN функция WriteFile является атомарной (http://msdn.microsoft.com/en-us/library/aa365747(VS.85).aspx), если записанные данные меньше, чем размер сектора.

Поскольку файл будет содержать только эти блоки (нет «структуры» файла, так что невозможно восстановить поврежденный файл), добавленные один за другим, жизненно важно, чтобы весь блок или ничего не записывали к файлу во все времена.

Итак, вопрос в том, правильно ли я понял, что файл записи меньше, чем размер сектора, всегда написан полностью на диск или вообще не написан вообще, независимо от того, что происходит во время фактического вызова файла записи?

ответ

6

WriteFile является атомарным, если запись не пересекает границу сектора в файле. Поэтому, если размер сектора составляет 512 байт, запись 20 байтов, начиная со смещения файла 0, будет атомарной, но те же данные, записанные в смещении файла 500, не будут атомарными. В вашем случае записи должны быть атомарными, так как размер сектора должен быть кратным 8.

This MSDN blog содержит дополнительную информацию о том, как сделать атомную многосекторную запись без использования транзакционной NTFS.

+0

Является ли это атомом, пока машина находится в нормальном состоянии? (т. е. если процесс может произойти сбой, но ядро ​​хранится в хорошем состоянии, то это атомарно?) – Mehrdad

Смежные вопросы