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

Micah J. Cowan vox-tech@lists.lugod.org
Wed, 21 May 2003 14:05:10 -0700


> > > 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.
> 
> If this were true, it would be a major limitation of Standard C... so I
> looked further and found that it is not.

<snip>

> Further, Section 4.9.3 (page 127) line 12 says:
> 
>   Binary files are not truncated, except as defined in 4.9.5.3.  Whether a
>   write on a text stream causes the associated file to be truncated beyond
>   that point is implementation-defined.
> 
> Truncation is mentioned only with regard to specific file open modes.
> "r+b" has no mention of truncation.

Huh! I must've just remembered the stuff for text streams and thought
I'd seen it to be true in general! I stand corrected.

> In short, I think binary updates without truncation _are_ supported in
> C89.  (whew!)  I don't have a copy of C99... perhaps you can check there.

I do, but I seriously doubt it has been changed there.

-Micah, doesn't know *what* he was smoking...