如何在 Linux 中用 C 语言快速创建大文件?

How to quickly create large files in C in Linux?

关注这个问题: How to quickly create large files in C?

我记得 4-5 年前,我能够在 Linux 中使用 fallocate shell 实用程序来创建没有 holes/gaps.

的文件

磁盘文件系统是 ext3、ext4 或 xfs。

当时,fallocate shell 实用程序在不到一秒的时间内创建了 8 GB 的文件。我不记得文件是全是零还是随机。

我现在尝试复制这个,但它似乎用 holes/gaps 创建文件。

我想知道这是如何用 C 语言完成的?

Linux 上的 fallocate 系统调用可以选择将 space 归零。

#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_RANGEext4支持

否则,如果您正在寻找更便携的解决方案(当然效率不高),您可以自己写零。