Самый быстрый и простой:
int fd = open("file", O_WRONLY);
off_t size = lseek(fd, 0, SEEK_END);
ftruncate(fd, 0);
ftruncate(fd, size);
Очевидно, было бы неплохо добавить проверку ошибок.
Это решение , а не , которое требуется для безопасного удаления файла. Он просто пометит старые блоки, используемые файлом, как неиспользуемые, и оставит разреженный файл, который не займет какое-либо физическое пространство. Если вы хотите удалить старое содержимое файла с физического носителя, вы можете попробовать что-то вроде:
static const char zeros[4096];
int fd = open("file", O_WRONLY);
off_t size = lseek(fd, 0, SEEK_END);
lseek(fd, 0, SEEK_SET);
while (size>sizeof zeros)
size -= write(fd, zeros, sizeof zeros);
while (size)
size -= write(fd, zeros, size);
Вы можете увеличить размер zeros
до 32768 или около того, если тестирование показывает, что оно повышает производительность, но после определенного момента это не должно помочь и будет просто пустой тратой.