C ++ Постоянный автономный счетчик

У меня есть встроенный сервер, который может быть отключен в любое время. Есть ли элегантный способ реализовать счетчик транзакций 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

1

Решение

(при условии, что на вашем сервере установлена ​​какая-то нефиксированная операционная система)

Вы можете попробовать использовать для этого идиому записи и переименования.

Что вы делаете, это записываете новое значение счетчика в другой файл, скажем counter.txt~, затем rename временный файл на регулярный counter.txt, rename гарантирует, что новая или старая версия файла будет существовать в любое время.

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]