【发布时间】:2010-10-16 21:51:00
【问题描述】:
我最近正在处理的一个问题让我希望我可以去掉文件的前面。有点像“前面截断”,如果你愿意的话。在后端截断文件是一种常见的操作——我们甚至没有考虑太多。但是去掉文件的前面?一开始听起来很荒谬,但这只是因为我们被训练认为这是不可能的。但 lop 操作在某些情况下可能很有用。
一个简单的例子(当然不是唯一或最好的例子)是 FIFO 队列。您正在将新项目添加到文件的末尾并从文件前面拉出项目。该文件随着时间的推移而增长,前面有一个巨大的空白空间。对于当前的文件系统,有几种方法可以解决这个问题:
- 删除每个项目后,复制 剩下的项目来替换它,和 截断文件。虽然有效, 这个解决方案非常昂贵 时间方面。
- 监控空白空间的大小 前面,当它到达一个 特定大小或百分比 整个文件大小,向上移动所有内容 并截断文件。这是很多 比以前更有效率 解决方案,但仍然需要时间 项目在文件中移动。
- 在 文件,将新项目添加到孔中 文件的前面作为项目是 删除。这可以是相当有效的, 特别是如果你不介意 事情脱离的可能性 队列中的顺序。如果你在乎 关于秩序,有可能 不得不四处移动物品。但在 一般来说,圆形队列很漂亮 易于实施和管理磁盘 空间很好。
但是如果有一个 lop 操作,从队列中删除一个项目就像更新文件开头标记一样简单。事实上,就像截断文件一样简单。那么,为什么没有这样的操作呢?
我对文件系统的实现有一点了解,并且没有看到任何特殊原因这会很困难。在我看来,它所需要的只是每个分配条目的另一个词(dword,也许是?)来说明文件在块内的开始位置。对于 1 TB 的驱动器低于 100 美元,为此类功能付出的代价似乎很小。
如果您可以像在结尾处截断一样有效地删除文件的前面,那么还有哪些任务会变得更容易?
您能想到什么技术原因无法将此功能添加到现代文件系统中吗?其他非技术原因?
【问题讨论】:
-
这种操作的一大优点是它可以避免闪存介质上的擦除周期。
-
与此同时,这个主题已经作为一个错误进入“truncate” linux 手册页。我相信有一天它会在我第一次提出要求 20 年后实施
-
同样的问题:stackoverflow.com/questions/339483/… 虽然在这里更明确
标签: filesystems