Как записать строки в файл, и каждая строка является атомарной операцией? - PullRequest
0 голосов
/ 19 октября 2011

Я хочу записать несколько строк в файл, и мне нужно, чтобы каждая строка записи была атомарной операцией.

Например, у меня есть 3 строки:записывать их в файл построчно, программа может завершиться ошибкой, поэтому сохраненные данные могут быть:

11111111111111111111111
222222

Это не то, что я ожидалЯ надеюсь, что каждая строка - это транзакция, атомарная операция.

Как мне это сделать?


В настоящее время я использую Java для этого.

Ответы [ 3 ]

4 голосов
/ 19 октября 2011

Нет 100% надежного способа гарантировать это.

Я думаю, что самое близкое, что вы можете получить, это вызвать flush() в выходном потоке, а затем sync() в базовом файловом дескрипторе.Опять же, существуют режимы сбоев, в которых это не поможет.

2 голосов
/ 19 октября 2011

Если вам действительно нужна атомарная запись новых строк в файл, я думаю, единственный способ - создать копию под новым именем, написать новую строку и переименовать новый файл в исходное имя.Операция переименования является атомарной, по крайней мере, в POSIX.В Windows вам нужно будет удалить исходный файл перед переименованием, что вызывает проблему невозможности восстановить файл, если в этом процессе возникает проблема.

1 голос
/ 19 октября 2011

Вы можете использовать сброс / синхронизацию, как подсказывает @aix. В противном случае (и лучше - надежность 99,999%) следует использовать некую среду (например, базу данных), которая включает поддержку транзакций, и использовать commit.

...