On Thu, 10 Jan 2002 11:35:30 +0000 (GMT), Richard Smith wrote:

>Thank you for the pointers. Unfortunately, the wooshing sound you just heard
>was that code passing over my head at high speed. As I do not like
>'cut-and-paste' programming, I am unwilling to use your code when I don't
>understand much of it. =8O)

You want me to walk you through it? OK...

>       use Fcntl;

import the constants

>       {
>           my @lockfiles;

array of lockfiles created by thris program

>           END {
>               foreach(@lockfiles) { unlink }  # for 5.004
>           }

When the program ends, it will delete every lockfile it created itself.

>           sub lockFile ($) {
>           #Create a lock file for the file passed as a parameter.
>               my $lockfile = shift() . '.lock';

file name

>               my $t0 = time;

starting time

>               local *LOCK;

just not to stamp on any existsing global filehandle with the same name

>               until(sysopen LOCK, $lockfile,
>                 O_CREAT|O_TRUNC|O_EXCL|O_WRONLY) {

Try to open a file for writing, just like ">", but fail if it exists.
"until(...){...}" is the same as "while(! ...){...}".

>                   die "Too many loops" if time-$t0 > 10;

It has been trying for over 10 seconds

>                   select undef, undef, undef, 0.1;

sleep() for 1/10th of a second

>               }

End of loop. If we get past here, we've been successful. The file now
exists, and is open.

>               push @lockfiles, $lockfile;

Marke the file for deletion when the script ends

>               print LOCK $$;

Just some info. It needn't be a plain "0".

>               close LOCK;

existence is enough to lock the file.

>           }

end of sub

>       }

end of scope for @lockfiles.

-- 
        Bart.

Reply via email to