Вы хотите заменить содержимое файла потоком двоичных нулей одинаковой длины, или вы просто хотите очистить файл? (сделайте так, чтобы он имел длину ноль)
В любом случае, это лучше всего делать с примитивами ввода-вывода файлов ОС. Вариант первый:
char buf[4096];
struct stat st;
int fd;
off_t pos;
ssize_t written;
memset(buf, 0, 4096);
fd = open(file_to_overwrite, O_WRONLY);
fstat(fd, &st);
for (pos = 0; pos < st.st_size; pos += written)
if ((written = write(fd, buf, min(st.st_size - pos, 4096))) <= 0)
break;
fsync(fd);
close(fd);
Вариант два:
int fd = open(file_to_truncate, O_WRONLY);
ftruncate(fd, 0);
fsync(fd);
close(fd);
Обработка ошибок оставлена как упражнение.