Удалить содержимое с начала файла c - PullRequest
0 голосов
/ 10 декабря 2018

Я реализую добавочный файл журнала для процесса сервера.Он записывает некоторое количество операций в журнал, а затем в различных точках записывает запись «контрольной точки».

В настоящее время у меня есть указатель FILE, открытый в добавляемом режиме для файла, для фактической записиfile.

То, что я хотел бы сделать, это в различных точках «сбросить» переднюю часть журнала с записи на диске до точки данной контрольной точки.Я могу найти соответствующие смещения байтов, которые мне нужно изменить.

Мой вопрос: есть ли изящный способ сделать это, аналогично truncate, но для передней части файла?Я могу воспользоваться возможностью записать то, что я хочу сохранить во временный файл, а затем поменять их местами, но если есть простая операция, которая не обязательно включает процесс повторного сканирования и записи в отдельный файл, я бы с удовольствиемзнать.

Спасибо за помощь!

1 Ответ

0 голосов
/ 10 декабря 2018

Мой вопрос: есть ли изящный способ сделать это, похожий на усечение, но для передней части файла?

Нет.

Вы 'Мне нужно атомарно скопировать данные, которые вы хотите оставить в файле, в начало файла, а затем обрезать их до новой длины.

Проще говоря, это невозможно сделать атомарно, оставляя вас открытым длявозможное повреждение или потеря данных.

И это даже не касается того, сможет ли процесс (ы), добавляющий к файлу, все это изящно обработать, что происходит с файлом, пока он открыт.,В зависимости от фактических особенностей открытия файла ( см. Различные значения oflag в документации по POSIX open() ), процесс (ы) записи в файл могут или не могут быть в состоянииобрабатывать операцию, даже если вы можете сделать это атомарно.

Не изобретайте правильные системы ведения журналов.Они уже занимаются такими вещами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...