in reply to (bbfu) Re: using loop/array to write files
in thread using loop/array to write files

I am not flocking each of the new files. I put the flock command after I open the first file. I thought locking the file is a good idea, since it is written to when a new ad is posted.

I am not executing the script via FTP, I just have my FTP program open when I executed the script via my browser.

And by line 22, I meant the line after "close (HITS_FILE);"

I started the while loop with this line:while ($line = <FILE>) { and closed with a bracket just before: close FILE;

Other than that, does the code look okay?
  • Comment on Re: (bbfu) Re: using loop/array to write files

Replies are listed 'Best First'.
Re (tilly) 3: using loop/array to write files
by tilly (Archbishop) on Sep 09, 2001 at 23:11 UTC
    The file lock does not good there. You have the following race:
    1. process 1 starts up and decides what file to create
    2. process 2 starts up and decides to create the same file.
    3. process 1 creates the file, and locks it.
    4. process 2 opens said file and tries to lock it.
    5. process 1 writes the file and exits.
    6. process 2 finally gets the file, overwrites what process 1 does and exits
    The fact is that while conceptually file locking is really simple, virtually nobody gets it right in practice. What you need to do instead is have a lockfile that always exists which, before doing operations that you want protected, you open and lock.

    That is the lock has to come before the process begins making any sort of decisions. And generally that means that you don't want to lock the file(s) you are going to work with.