gpt4 book ai didi

c++ - 删除文件的开头而不重写整个文件

转载 作者:IT老高 更新时间:2023-10-28 22:04:22 25 4
gpt4 key购买 nike

我有一个嵌入式 Linux 系统,它将数据存储在一个非常大的文件中,并将新数据附加到末尾。随着文件大小增长到接近可用存储空间,我需要删除最旧的数据。

问题是,我真的不能接受像往常一样将大量数据“向上”移动到文件所需要的中断 - 长时间锁定文件只是为了重写它(加上这是闪存介质,会对闪存造成不必要的磨损)。

可能最简单的方法是将文件拆分为多个较小的文件,但这有几个与数据处理方式相关的缺点 - 所有“客户端”软件都需要单个文件。 OTOH它可以处理将第一条记录切成两半的“损坏”,因此不需要在记录偏移处修剪文件,只需在“某处”,例如前几个 iNode 被释放。最旧的数据无论如何都是过时的,因此文件开头更严重的损坏是完全可以接受的,只要“尾部”保持干净,并且可以随意删除多少,“大约前几兆字节”是可以的,不需要“精确的前 4096KB”精度。

是否有一些方法、API、技巧、黑客可以像这样截断文件的开头?

最佳答案

您可以使用 Linux 内核 v3.15 以上的 ext4/xfs 文件系统来实现目标。

int ret = fallocate(fd, FALLOC_FL_COLLAPSE_RANGE, 0, 4096);

看这里 Truncating the first 100MB of a file in linux

关于c++ - 删除文件的开头而不重写整个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24239916/

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