Hi Bart,

A short while ago you were kind enough to help me improve the method 
I use for locking files. The routine you sent me is below (I have 
commented it heavily to help me follow it, and used my own error 
reporting routine):

__SNIP__
use Fcntl;

my @lockfiles;
my $timeOut = 10;
END {
          for ( @lock_files ) { unlink }
}
sub lockFile    {
        #       Create a lock file for the file passed as a parameter.
        #       If no parameter is passed, return a false value.
        my $lock_file = shift() . '.lock';
        my $idle = time;
        local *LOCK;
        #       Now try and create a lock file. Try every 1/10th of a 
second if a file already exists
        until ( sysopen LOCK, $lock_file, O_CREAT|O_TRUNC|O_EXCL|O_WRONLY ) {
                #       Die if the file cannot be created within a 
specified time
                &outputError( 'Could not create a lock file within 
the time limit', $!) if time - $idle > $timeOut;
                #       sleep for 1/10th of a second
                select undef, undef, undef, 0.1;
        }
        #       If we get here, then the lock file has been created 
successfully.
        #       Add the lockfile name to the list to be deleted.
        push @lock_files, $lock_file;
        #       Now send some data to the lock file (anything will do).
        print LOCK $$;
        close LOCK;

        return 1;
}
__END_SNIP__

I have just implemented this routine, and it works very well. Many 
thanks. However, I am a little unsure about what to do if the script 
cannot create a lock file within the prescribed time (in this case 10 
seconds). I do not want visitors to be faced with a dead script if a 
lock file is left on the server for any reason. If possible, can you 
advise me of any method that I can safely use to remove this file?

Any help would be much appreciated.

TIA,

Richard
-- 

Team Artonomy,
Drawing Business.

[EMAIL PROTECTED]

http://www.team-artonomy.com
http://www.team-artonomy.net
http://www.drawingbusiness.com

Featured on Wow Web Designs,
http://www.wowwebdesigns.com

*************************************

Reply via email to