Как эффективно обрезать заголовок файла? - PullRequest
0 голосов
/ 11 февраля 2019

Всем известна функция truncate(file, size), которая изменяет размер файла до заданного размера путем усечения хвоста файла.Но как сделать то же самое, только с усечением не хвоста файла, а его головы?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Как правило, вы должны переписать весь файл.Самый простой способ - пропустить первые несколько байтов, скопировать все остальное во временный файл и переименовать временный файл поверх старого, когда закончите.Более сложный способ - переписать его на месте, аналогично тому, как работает memmove, с чтением / поиском / записью / поиском или pread / pwrite, а затем обрезать последний бит по завершении.

Если выв последней версии Linux (> = 3.15), и у вас есть поддерживаемая файловая система (в настоящее время ext4 или xfs), и количество, которое вы хотите удалить, кратно размеру блока файловой системы, вы можете использовать непереносимыйfallocate(2) с флагом FALLOC_FL_COLLAPSE_RANGE.Обратите внимание, что эта функция не поддерживается портативным posix_fallocate.

0 голосов
/ 11 февраля 2019

Единственный способ - прочитать весь файл и перезаписать его с необходимой позиции.

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