Создание файла обтекания при использовании fwrite

Я использую встроенную систему под управлением Linux. Я использую файловую систему ramdisk на встроенной цели. Мое приложение собирает данные в реальном времени и выполняет стандартный f "fwrite" для файла на этом виртуальном диске fs. Поскольку объем памяти ограничен, я хотел бы установить максимальный размер файла и заставить fwrite оборачиваться как круговой буфер. Есть ли способ сделать это таким образом, который прозрачен для приложения? Я бы предпочел, чтобы приложение оставалось неизменным при миграции на файловую систему на устройстве хранения (eSATA), имеющем гораздо большую емкость.

1 ответ

Решение

Там нет встроенного метода достижения этого.

Наилучшим вариантом, вероятно, является написание небольшой функции-оболочки, которая заботится о записи в файл, сохраняя при этом количество записанных байтов.

Как только он достигнет максимального размера, который вы установили, он должен вызвать rewind() (или же fseek() и т. д.), чтобы вернуться к началу файла.


Это может быть проще в использовании mmap() на карту памяти вашего файла, а затем обрабатывать его как круговой буфер. Но, опять же, вам нужно будет реализовать упаковку самостоятельно.

Другие вопросы по тегам