On Thu, 2002-02-14 at 18:27, Martin Towell wrote:
> or read the original file into memory, reopen the file for writing, write
> the first prepend bit, then write what you just read

The problem with that is that you have a time lag (perhaps only
in microseconds, but it still is a problem) while you're writing
the new data to the file. If some other process--say, another
invocation of the same script--tries to read from that file while
you're still overwriting it--you've got problems, since it'll find
only a partially-written file.

That's called a 'race condition'. The other method avoids that,
since while you're writing data to the temp file, processes just
keep using the original. Once you're done, the rename happens 
atomically, preventing the race condition.


Torben

> -----Original Message-----
> From: Lars Torben Wilson [mailto:[EMAIL PROTECTED]]
> Sent: Friday, February 15, 2002 1:18 PM
> To: John Smythe
> Cc: [EMAIL PROTECTED]
> Subject: Re: [PHP] fopen
> 
> 
> On Thu, 2002-02-14 at 17:34, John Smythe wrote:
> > i wanna know if there is a way of opening a file in a certian mode so when
> i write to a txt file it writes at the top of the file, and doesnt overwrite
> whats at the start of the file
> 
> No, not with fopen(). What you can do is create a temporary file with 
> tempnam(), write the new data to that, *append* the data from the
> original file, and rename the temp file over the original file.
> 
> 
> Cheers,
> 
> Torben
> 
> 
> > Regards,
> > John Smythe
> > http://www.smythey.org/  
> -- 
>  Torben Wilson <[EMAIL PROTECTED]>
>  http://www.thebuttlesschaps.com
>  http://www.hybrid17.com
>  http://www.inflatableeye.com
>  +1.604.709.0506
> 
> 
> -- 
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
-- 
 Torben Wilson <[EMAIL PROTECTED]>
 http://www.thebuttlesschaps.com
 http://www.hybrid17.com
 http://www.inflatableeye.com
 +1.604.709.0506


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to