> -----Original Message-----
> From: James F.Hranicky [mailto:jfh / cise.ufl.edu]

<snip>

> If you want to tail beginning at an arbitrary position in the file, 
> that will work, but many will probably want to specify the # of lines
> from the end.

I agree.  I don't think the *nix tail command even allows you to tail from a
specific byte position, though I could be wrong.  I can't see much use for
that myself.
 
> You could seek to the end, then seek backwards in chunks, read in each
> chunk, then count backwards through the chunk counting newlines and 
> keeping track of filepos, and once you hit the # lines you 
> want, seek to 
> that position and then read from there. This would cut down on the #
> of seeks and reads in my method above, probably resulting in much 
> better performance.  

I proposed this in my last solution, though it doesn't grab a block of data
first.  I know the source for tail does this, but if we're counting char by
char anyway, how does first grabbing a 4k block (or whatever) help?

# max default is 10
def get_lines(max)
      
      @fh.seek(0,IO::SEEK_END)
      newline_count = 0
      while newline_count < max 

         begin
            @fh.pos -= 2
         rescue Errno::EINVAL
            break
         end

         break if @fh.eof?

         if @fh.getc.chr == "\n"
            newline_count += 1
         end
      end

      @fh.readlines
   end

Regards,

Dan