reverse of getchar() read() open() fopen() ?

Julian H. Stacey jhs at berklix.com
Sat Feb 12 00:26:03 UTC 2011


Andrew Duane wrote:
> I've never seen any such thing, but I've done similar things a
> lot. I'd say malloc/read the whole file in and use a decrementing
> pointer to return the "previous" character.

Thanks, but I'll need a loop too, as malloc(filesize()) would be
too big, as I omitted to say I'll be running it from find, reading
all files on system, including DVD images @ 4.7G. Some of my machines
dont have that much swap, let alone RAM :-)

Aside:
  I was doing inefficient things here with getchar() (while searching
  forward, for a one off run, (CPU cycles were cheaper than brain
  cycles, so it was easier to hack a pre-existing prog that used
  getchar() ).
  I was doing a search for (trailing) nulls blocks, from BSD tar silently
  zeroing data from bad media, per
    http://lists.freebsd.org/pipermail/freebsd-hackers/2011-January/034254.html
    http://www.freebsd.org/cgi/query-pr.cgi?pr=154407
    http://berklix.com/~jhs/src/bsd/fixes/FreeBSD/src/gen/usr.bin/tar/
  But my search logs from find with
    http://berklix.com/~jhs/src/bsd/jhs/bin/public/8f
  were too big, so I'll reduce by searching backward & only indexing
  on trailing nulls.


Dan Nelson wrote:

> You might even be able to write functions that could be passed to funopen(). 
> Then you'd have a regular FILE* that you could call with regular stdio
> functions.  Getting the buffering right for good performance might get
> tricky, though.

Thanks, I didnt know funopen, I'll read it again tomorrow morning :-)

Thanks to Devin Teske re src/usr.bin/tail/,
sorry in my first post I forgot to say binary.


Brian Reichert wrote:

> Use lseek() to position yourself, iterate over the file, copying into a
> small buffer, then iterate over your buffer in reverse?

Yes, thanks, better for efficiency, being lazy I had first
wondered if there was some fopen_starting_from_tail()
& getchar_starting_from_tail() I could just call for aone off run :-)

Thanks all.

Cheers,
Julian
-- 
Julian Stacey, BSD Unix Linux C Sys Eng Consultants Munich http://berklix.com
 Mail plain text;  Not quoted-printable, Not HTML, Not base 64.
 Reply below text sections not at top, to avoid breaking cumulative context.


More information about the freebsd-hackers mailing list