У меня есть встроенный сервер, который может быть отключен в любое время. Есть ли элегантный способ реализовать счетчик транзакций c ++? В худшем случае он должен вернуть предыдущий идентификатор.
У меня есть встроенный сервер, который периодически генерирует файлы отчетов. На сервере нет времени или сетевого подключения, поэтому я хочу генерировать файлы отчетов постепенно. Однако после загрузки файлов отчетов я хотел бы удалить файлы отчетов, сохраняя при этом счетчик:
report00001.txt
report00002.txt
report00003.txt
report00004.txt
// all the files have been deleted
report00005.txt
...
Я хотел бы использовать такой код:
int last = read_current_id("counter.txt");
last++;
// transaction begin
write_id("counter.txt", last);
// transaction end
(при условии, что на вашем сервере установлена какая-то нефиксированная операционная система)
Вы можете попробовать использовать для этого идиому записи и переименования.
Что вы делаете, это записываете новое значение счетчика в другой файл, скажем counter.txt~
, затем rename
временный файл на регулярный counter.txt
, rename
гарантирует, что новая или старая версия файла будет существовать в любое время.
Вы также должны смонтировать свою файловую систему с sync
вариант, чтобы содержимое файла не буферизовалось в оперативной памяти. Однако обратите внимание, что это снизит производительность и может сократить срок службы флэш-памяти.
Других решений пока нет …