如何在 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 的内核调用?
- 一些内核调用在规范中有错误,后来被修复了?
- 一些不再可用的内核调用?
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_RANGE
。 ext4
支持
否则,如果您正在寻找更便携的解决方案(当然效率不高),您可以自己写零。
关注这个问题: 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 的内核调用?
- 一些内核调用在规范中有错误,后来被修复了?
- 一些不再可用的内核调用?
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_RANGE
。 ext4
支持
否则,如果您正在寻找更便携的解决方案(当然效率不高),您可以自己写零。