gpt4 book ai didi

linux - 在 Linux 中截断文件的前 100MB

转载 作者:IT王子 更新时间:2023-10-29 00:20:19 26 4
gpt4 key购买 nike

我指的是 How can you concatenate two huge files with very little spare disk space?

我正在实现以下内容:

  1. 分配一个合并大小的稀疏文件。
  2. 从第二个文件的末尾复制 100Mb 到新文件的末尾。
  3. 截断第二个文件末尾的 100Mb
  4. 循环 2 和 3,直到完成第二个文件(将 2. 修改为目标文件中的正确位置)。
  5. 执行 2&3&4,但使用第一个文件。

我想知道是否有人能够在 Linux 中“截断”给定文件?截断是按文件大小进行的,例如,如果文件是 10GB,我想截断文件的前 100MB,并保留文件剩余的 9.9GB。有人可以帮忙吗?

谢谢

最佳答案

回答,现在 Linux 内核 v3.15 (ext4/xfs) 已经成为现实

阅读这里 http://man7.org/linux/man-pages/man2/fallocate.2.html

测试代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>

#ifndef FALLOC_FL_COLLAPSE_RANGE
#define FALLOC_FL_COLLAPSE_RANGE 0x08
#endif

int main(int argc, const char * argv[])
{
int ret;
char * page = malloc(4096);
int fd = open("test.txt", O_CREAT | O_TRUNC | O_RDWR, 0644);

if (fd == -1) {
free(page);
return (-1);
}

// Page A
printf("Write page A\n");
memset(page, 'A', 4096);
write(fd, page, 4096);

// Page B
printf("Write page B\n");
memset(page, 'B', 4096);
write(fd, page, 4096);

// Remove page A
ret = fallocate(fd, FALLOC_FL_COLLAPSE_RANGE, 0, 4096);
printf("Page A should be removed, ret = %d\n", ret);

close(fd);
free(page);

return (0);
}

关于linux - 在 Linux 中截断文件的前 100MB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18072180/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com