in reply to seek() functionality on pipes

That's pretty much the only option if you need the entire file. If you only need to be able to seek back within a smaller window you can implement your own buffering reads and move your "filepointer" within your buffer back and forth (I believe this is how less implements being able to page back on piped input), but as you point out both approaches have overhead issues.

The cake is a lie.
The cake is a lie.
The cake is a lie.