Поддерживает ли boost циклические файлы? - PullRequest
2 голосов
/ 04 марта 2011

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

Чтобы быть более понятным, я хочу рассматривать файл как кольцевой буфер - т.е. записи в буфер будут идти в файл, а чтения будут считывать файлы.Конкретно я делаю логи.

Мне было интересно, есть ли в boost какая-либо функциональность, которую я могу использовать (в идеале - круговой файл).

Я видел, что в boost есть циклический буфер, но я не могу использовать его сфайл как своего рода бэк-энд.Я даже думал о mmap() -вложении файла в память (что не будет хорошим решением, если я использую журналы размером более 4 ГБ) и возвращении сопоставленного фрагмента обратно из Allocator, который я передамбуфер.
Это кажется плохим подходом, поскольку в документации по циклическому буферу сказано, что Allocator будет использоваться для любого выделения памяти (а не только выделения буфера).

Существуют ли какие-либо другие функции для циклических файлов или какой-то другой способ сделать это?

Ну, на самом деле я имел в виду ведение журнала в смысле журналов файловой системы (то есть запись записей).У меня есть диск, который я хочу записать (записывает на него), чтобы я мог сделать CDP.Мне нужно вести журнал всех записей и меток, чтобы я мог откатить диск до положения, в котором он находился ранее.
В журналах может быть много места (более 10 ГБ легко), поэтому яне знаю, будет ли работать решение mmap.

Ответы [ 3 ]

6 голосов
/ 04 марта 2011

Как насчет использования файла карты памяти Boost's Circular Buffer + Boost IPC? В документации МПК говорится, что это возможно: http://www.boost.org/doc/libs/1_46_0/doc/html/interprocess/allocators_containers.html (см. Последнюю строку).

1 голос
/ 04 марта 2011

Допустимо ли RRDtool ?Это на C, а не на C ++, но, надеюсь, создание объектно-ориентированной оболочки вокруг API не будет слишком ужасным.

0 голосов
/ 04 марта 2011

Вы пометили свой вопрос как Linux и пишете файлы журналов, поэтому настройте logrotate для своего приложения. Это более чем достаточно гибко, чтобы делать то, что вы хотите.

...