【问题标题】:How to quickly create large files in C in Linux?如何在 Linux 中用 C 语言快速创建大文件?
【发布时间】:2020-05-09 20:16:39
【问题描述】:

以下问题: How to quickly create large files in C?

我记得 4-5 年前,我能够在 Linux 中使用fallocate shell 实用程序来创建没有孔/间隙的文件。

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

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

我现在尝试复制这个,但它似乎创建了带有孔/间隙的文件。

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

  • 某些仅适用于 Linux 的内核调用?
  • 某些内核调用在规范中有错误,后来被修复了?
  • 某些内核调用不再可用?

【问题讨论】:

  • fallocate 需要文件系统支持

标签: c linux filesystems large-files fallocate


【解决方案1】:

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

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

【讨论】:

  • 谢谢。知道如何将其移植到 MacOS / FreeBSD 上,而不需要 root 权限吗?
猜你喜欢
  • 2013-05-22
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
  • 1970-01-01
相关资源
最近更新 更多