SF.*_*SF. 18 c c++ linux file-io
我有一个嵌入式Linux系统,它将数据存储在一个非常大的文件中,并将新数据附加到最后.随着文件大小增加到填充可用存储空间附近,我需要删除最旧的数据.
问题是,我不能真正接受将大量数据"移动"到文件中所需要的中断,就像正常一样 - 将文件锁定一段时间只是为了重写它(加上这是一个闪存介质) ,这会对闪光灯造成不必要的磨损).
可能最简单的方法是将文件拆分成多个较小的文件,但这有几个与数据处理和处理方式相关的缺点 - 所有"客户端"软件都需要单个文件.OTOH它可以处理将第一个记录减半的'腐败',因此文件不需要在记录偏移处进行修整,只需"在那里某处",例如,前几个iNode被释放.无论如何,最旧的数据已经过时,因此文件开头的更严重的损坏是完全可以接受的,只要"尾巴"保持清洁,并且可以采取多少精确删除的自由 - "大约几个第一兆字节"是可以的,无需'先精确4096KB'精度.
是否有一些方法,API,技巧,黑客来截断这样的文件的开头?
Sun*_*Wei 10
对于ext4/xfs文件系统,您可以使用上面的Linux内核v3.15实现目标.
int ret = fallocate(fd, FALLOC_FL_COLLAPSE_RANGE, 0, 4096);
Run Code Online (Sandbox Code Playgroud)
看到这里 在linux中截断文件的前100MB
旧应用程序最简单的解决方案是FUSE文件系统,它可以访问底层文件,但循环移位偏移量.这将允许您在物理级别实现环形缓冲区.FUSE层非常简单,因为它只需要通过常量的模数文件大小来调整所有文件位置.
| 归档时间: |
|
| 查看次数: |
2014 次 |
| 最近记录: |