From: Robert Lorentz <rlorentz@lucidsoft.org>
To: eric@cisu.net
Cc: Venkatesh Joshi <joshiv@cisco.com>, linux-c-programming@vger.kernel.org
Subject: Re: how to implement tail -n
Date: Tue, 25 Jan 2005 09:10:23 -0500 [thread overview]
Message-ID: <41F6534F.4030507@lucidsoft.org> (raw)
In-Reply-To: <200501240030.29947.eric@cisu.net>
Eric Bambach wrote:
>On Sunday 23 January 2005 11:49 pm, you wrote:
>
>
>>Hi,
>>
>>I would like to know how to implement "tail -n" in C.
>>
>>The "-n" option will be used to print the last n lines of a file -
>>rather than the default option of printing the last 10 lines of a file.
>>
>>I wish to do this in a single pass. I can use lseek() to go to the end
>>of the file. How to traverse backwards from there ? Is there any
>>function that does this ?
>>
>>
>
>Not that I know of. There is no GOOD way to do this in a single pass since the
>lines can be of varying length. If by single pass you meant you want
>performace, then dont read a char at a time, rather just seek to the end of
>the file, read in about 4K( a reasonable buffer) or so and see if you can
>find (n+1) newlines. If you dont, read in 4 more k and keep going backwards
>till you find them.
>
>P.S. Please dont hi-jack subjects. Type in a new message instead of replying
>to something and deleting the original message; it screws with threading.
>
>
>
>
>>thanks,
>>venkatesh
>>-
>>To unsubscribe from this list: send the line "unsubscribe
>>linux-c-programming" in the body of a message to majordomo@vger.kernel.org
>>More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>>
>
>
>
What Eric describes is exactly how it IS implemented in GNU tail. To
see this implementation you can look at the source which can be found in
this tarball -- http://ftp.gnu.org/gnu/coreutils/coreutils-5.2.0.tar.gz
(src/tail.c)
Sometimes looking at source is enlightening, sometimes it is not. In
this particular case the code is extremely well commented and clear, so
you should be able to get some good info fast. The function you're
interested in is 'file_lines(...'
Robert
next prev parent reply other threads:[~2005-01-25 14:10 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-01-23 6:26 pointer initialization of string constant Krishna Mohan
2005-01-23 12:45 ` Progga
2005-01-23 13:36 ` Krishna Mohan
2005-01-24 5:49 ` how to implement tail -n Venkatesh Joshi
2005-01-24 6:30 ` Eric Bambach
2005-01-25 14:10 ` Robert Lorentz [this message]
2005-01-24 19:26 ` Glynn Clements
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=41F6534F.4030507@lucidsoft.org \
--to=rlorentz@lucidsoft.org \
--cc=eric@cisu.net \
--cc=joshiv@cisco.com \
--cc=linux-c-programming@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).