Системный вызов fallocate
на Linux имеет возможность обнулить пробел.
#define _GNU_SOURCE
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int fd = open("testfile", O_RDWR | O_TRUNC | O_CREAT, 0755);
off_t size = 1024 * 1024 * 1024;
if (fd == -1) {
perror("open");
exit(1);
}
if (fallocate(fd, FALLOC_FL_ZERO_RANGE, 0, size) == -1) {
perror("fallocate");
exit(1);
}
}
Обратите внимание, что FALLOC_FL_ZERO_RANGE
может поддерживаться не всеми файловыми системами. ext4
поддерживает его.
В противном случае вы могли бы написать нули самостоятельно, если ищете более портативное решение (что, конечно, не так эффективно).