当前位置: 首页 > 面试题库 >

删除文件开头而不重写整个文件

鲁乐
2023-03-14
问题内容

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

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

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

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


问题答案:

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

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


 类似资料:
  • 问题内容: 我想用Java编写一个文件而不清除(删除)该文件上的旧数据! 我运行此代码,发现每次运行后,.txt文件上的所有较旧数据都被清除了! 我的代码在这里: 问题答案: 使用可以指示在附加模式下打开文件的构造函数:

  • 我在更新带有sed删除效果的文件时遇到问题。 当我执行以下操作时,更换 即时shell输出显示最后一行已删除,但在执行时 这表明此删除尚未存储,为什么?

  • 问题内容: 我有一个CSS文件,当我使用gedit打开它时看起来不错,但是当PHP读取它(将所有CSS文件合并为一个文件)时,该CSS前面有以下字符: PHP删除了所有空格,因此代码中间的一个随机“ 正如我提到的,当我在gedit中打开文件时,我实际上看不到这些字符,因此我无法轻松地删除它们。 我用谷歌搜索了这个问题,文件编码显然有问题,这是有道理的,因为我一直在通过ftp和rsync使用文

  • 问题内容: 我刚刚在android应用程序中编写了一个函数,该函数使用Java中的标准“文件”类删除文件。即: 尽管上面的过程很简单,但我一直想知道通过“ ContentResolver”执行该操作是否有任何好处。任何意见,将不胜感激。 干杯, 杰瑞德 ------------------------------------------编辑------- 这是通过Content Resolver删

  • 问题内容: 我现在正在这样做,但是我希望它写在文件的开头。 这样的内容将是: 而不是(就像这段代码一样): 问题答案: 看一下这个问题。那里有一些解决方案。 尽管我可能会以Daniel和MAK所建议的相同方式进行操作-也许要上课以使事情更加灵活和明确: