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

Jeff Newmiller vox-tech@lists.lugod.org
Tue, 20 May 2003 22:08:50 -0700 (PDT)


On Tue, 20 May 2003, 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.
> 
> Reading isn't a problem -- I can use fseek or lseek or whatever and read
> the data I want using fread or read.  No problem.
> 
> Writing is another matter.  When I seek to the spot and write the modified
> data, it destroys the data that comes afterwards.

You need to be careful how you open it... if you are using open, you
probably want O_RDWR mode... if fopen, "r+".

> There's another catch: I gotta use 64-bit safe calls because the file I'm
> reading/writing is quite big (> 2GB).  And since the file is so big, I
> can't store the data that follows to prevent it from getting overwritten.
> 
> Anybody know how to do this?  I'm so disheartened.  Please help!!  Thanks!

Google sez http://www.suse.de/~aj/linux_lfs.html.  Note that the gory
details are described in the document linked at the bottom of the "Using
LFS" section.

I say be scrupulous about using typedefs like off_t or you will be sorry,
and beware of shared libraries that aren't set up for large file support.

PS: Looked at your code... it is always a red flag to me when you place
your own prototypes for library functions in your source file.  Use the
defines described in the document referenced above.  Also, you are using
"w+b" instead of "r+b".

---------------------------------------------------------------------------
Jeff Newmiller                        The     .....       .....  Go Live...
DCN:<jdnewmil@dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
                                      Live:   OO#.. Dead: OO#..  Playing
Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
/Software/Embedded Controllers)               .OO#.       .OO#.  rocks...2k
---------------------------------------------------------------------------