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

问题描述 投票:0回答:1

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

我记得4-5年前,我能够在Linux中使用fallocate shell实用程序创建没有漏洞/空白的文件。

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

当时,fallocate Shell实用程序在不到一秒钟的时间内创建了8 GB的文件。我不记得文件是否充满零或随机。

我现在尝试复制此文件,但似乎创建的文件带有漏洞/空白。

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

  • 某些仅Linux的内核调用?
  • 某些内核调用中的规范错误后来被修复?
  • 一些不再可用的内核调用?
c linux filesystems large-files fallocate
1个回答
0
投票

Linux上的fallocate系统调用具有将空间归零的选项。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.