On Jul 16, 2021, at 5:09 AM, Douglas McIlroy <douglas.mcilroy(a)dartmouth.edu> wrote:
> -r is weird because it enables backwards
reading, but only as
> limited by count. Better would be a program, say revfile, that simply
> reads backwards by lines. Then tail p has an elegant implementation:
> revfile p | head | revfile
tail -n can be smarter in that it can simply read
the last K bytes
and see if there are n lines. If not, it can read back further.
revfile would have to read the whole file, which could be a lot
more than n lines! tail -n < /dev/tty may never terminate but it
will use a small finite amount of memory.
Revfile would work the same way. When head has seen enough
and terminates, revfile will get SIGPIPE and stop. I agree that,
depending on scheduling and buffer management, revfile might
read more than tail -n, but it wouldn't read the whole of a
humongous file.
Good point! But when the input is from a device it would have to
buffer up everything since it doesn't know how much head would
want. No big deal of course but I was just pointing out that tail
can "behave better" in all cases!
-- Bakul