Создание файла обтекания при использовании fwrite - PullRequest
2 голосов
/ 24 сентября 2010

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

1 Ответ

2 голосов
/ 24 сентября 2010

Нет встроенного метода для достижения этой цели.

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

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

...