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