以下问题:How to quickly create large files in C?
我记得4-5年前,我能够在Linux中使用fallocate shell实用程序来创建没有漏洞/空白的文件。
磁盘文件系统要么是ext3、ext4,要么是xfs。
当时,fallocate shell实用程序在不到1秒的时间内创建了8GB的文件。我不记得文件是满是零还是随机。
我现在试着复制它,但它似乎创建了带有漏洞/空白的文件。
我想知道这是如何用C语言完成的?
。
发布于 2020-05-09 12:16:39
Linux上的fallocate系统调用有一个选项可以使空间为零。
#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支持它。
否则,如果您正在寻找更可移植的解决方案(当然,这并不是那么有效),您可以自己编写零。
https://stackoverflow.com/questions/61695266
复制相似问题