title: Truncate file at front
body: <p>A problem I was working on recently got me to wishing that I could lop off the front of a file. Kind of like a “truncate at front,” if you will. Truncating a file at the back end is a common operation–something we do without even thinking much about it. But lopping off the front of a file? Sounds ridiculous at first, but only because we’ve been trained to think that it’s impossible. But a lop operation could be useful in some situations.</p>
  
  <p>A simple example (certainly not the only or necessarily the best example) is a FIFO queue. You’re adding new items to the end of the file and pulling items out of the file from the front. The file grows over time and there’s a huge empty space at the front. With current file systems, there are several ways around this problem:</p>
  
  <ul>
  <li>As each item is removed, copy the
  remaining items up to replace it, and
  truncate the file. Although it works,
  this solution is very expensive
  time-wise.</li>
  <li>Monitor the size of the empty space at
  the front, and when it reaches a
  particular size or percentage of the
  entire file size, move everything up
  and truncate the file. This is much
  more efficient than the previous
  solution, but still costs time when
  items are moved in the file.</li>
  <li>Implement a circular queue in the
  file, adding new items to the hole at
  the front of the file as items are
  removed. This can be quite efficient,
  especially if you don’t mind the
  possibility of things getting out of
  order in the queue. If you do care
  about order, there’s the potential of
  having to move items around. But in
  general, a circular queue is pretty
  easy to implement and manages disk
  space well.</li>
  </ul>
  
  <p>But if there was a lop operation, removing an item from the queue would be as easy as updating the beginning-of-file marker. As easy, in fact, as truncating a file. Why, then, is there no such operation?</p>
  
  <p>I understand a bit about file systems implementation, and don't see any particular reason this would be difficult.  It looks to me like all it would require is another word (dword, perhaps?) per allocation entry to say where the file starts within the block.  With 1 terabyte drives under $100 US, it seems like a pretty small price to pay for such functionality.</p>
  
  <p>What other tasks would be made easier if you could lop off the front of a file as efficiently as you can truncate at the end?</p>
  
  <p>Can you think of any technical reason this function couldn't be added to a modern file system?  Other, non-technical reasons?</p>