[vox-tech] [C] randomly accessing file data in C

Micah J. Cowan vox-tech@lists.lugod.org
Wed, 21 May 2003 11:36:51 -0700


On Wed, May 21, 2003 at 09:50:38AM -0700, Ken Herron wrote:
> 
> 
> --On Wednesday, May 21, 2003 09:05:15 -0700 "Micah J. Cowan" 
> <micah@cowan.name> wrote:
> 
> > On Tue, May 20, 2003 at 06:45:53PM -0700, Mark K. Kim wrote:
> >> Hello...
> >>
> >> I'm trying to access data in a file in C.  I want to read some portion
> >> of it, modify it, then rewrite that portion back into the file.
> >
> > I don't think what you're trying to do is possible. What you *can* do,
> > is read in the file in chunks of an appropriate size for keeping in
> > memory, and writing them out to a new (temporary) file as you go. As
> > soon as you reach the spot you need to modify, you just modify the
> > data you are going to write out to the new file, and then copy the
> > tail end of the original, chunk-by-chunk, into the temporary file.
> 
> Er, what?  Overwriting part of a file is a normal operation. Kim's 
> problem is that he's opening the output file in "w+" mode, which 
> truncates the file.

Um, sorry. I was thinking from a comp.lang.c perspective. I never use
that technique if I expect it to work on other systems, because as far
as the ISO C standard is concerned, writing to any point in the middle of a
file may result in truncation, regardless of which mode was used.

-Micah