On Wed, 30 Aug 2006, Paul Lutus wrote:

> Radu Spineanu wrote:
>
>> Hi,
>>
>> I have two programs accessing the same file. Both programs open and
>> close the file multiple times while running (for example reading it
>> first, and then writing it back using global functions).
>>
>> In order to avoid race conditions i was wondering if it's possible to
>> lock the file at the start of the running process and then unlock it at
>> the end. During that time the running process should be able to open and
>> close the file without problems.
>
> If both programs are willing to cooperate with each other, why not use a
> flag file, as is often done to lock and unlock various resources in Linux?
> This approach has the advantage of being platform-neutral and doesn't
> require any explicit file-locking facilities.
>
> -----------------------------------------
>
> #!/usr/bin/ruby -w
>
> flag_file = "FLAGFILE"
>
> puts "Waiting for access ..."
> while FileTest.exists? flag_file
>   sleep 1
> end
>
> puts "Creating flag file ..."
> ff = File.open(flag_file,"w") {}
>
> puts "Processing ..."
> sleep 5
>
> puts "Removing flag file ..."
> File.delete flag_file
>
> -----------------------------------------
>
> There is an obvious collision possibility in this arrangement, that may or
> may not be an issue.

plus, it fails horriblly on nfs.  this does all that and much, much more -
including preventing stale lock starvation

   http://codeforpeople.com/lib/ruby/lockfile/lockfile-1.4.0/README
   http://codeforpeople.com/lib/ruby/lockfile/lockfile-1.4.0/
   http://rubyforge.org/frs/?group_id=1024&release_id=3473

gen install lockfile

regards.

-a
-- 
what science finds to be nonexistent, we must accept as nonexistent; but what
science merely does not find is a completely different matter... it is quite
clear that there are many, many mysterious things.
- h.h. the 14th dalai lama