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
*************************************