c – 删除文件的开头,而无需重写整个文件

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

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

可能最简单的方法是将文件拆分为多个较小的文件,但这与数据的处理和处理有几个缺点 – 所有“客户端”软件都期望单个文件。 OTOH可以处理第一个记录削减一半的“腐败”,因此该文件不需要在记录偏移量被修剪,只是“某处某处”,例如最初几个iNodes被释放。最旧的数据无论如何也是过时的,所以文件开头的更严重的腐败是完全可以接受的,只要’尾’保持清洁,并且可以采取多少精确删除的自由 – “大概几个第一兆字节是可以的,不需要“第一个4096KB的精确度”。

有没有一些方法,API,技巧,hack截断文件的开头呢?

您可以通过Linux内核v3.15实现目标,用于ext4 / xfs文件系统。

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

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

http://stackoverflow.com/questions/24239916/remove-beginning-of-file-without-rewriting-the-whole-file

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 删除文件的开头,而无需重写整个文件