4th Floor, 4 Tabernacle Street London EC2A 4LU

Perl – Lock Files (flock)

The following script is an example of using lock files in Perl. This prevents more than one user or process accessing a file at a time.

[perl] use Fcntl qw(:DEFAULT :flock);
use Fcntl ‘:flock’;¬†¬†¬†¬† #LOCK_* constants

my($lockneedsremoving)=0;
my($lockfilename)=”/var/.pwd.lock”;

unless (createlock()) {
print “Lock has been created”;
print “This is only run if their was no lock file present”;
}

releaselock();

sub releaselock
{
# Only remove the lockfile if we created it.
if ( $lockneedsremoving  )
{
writelog (“Removing sudo lock”);
-f “${lockfilename}” and unlink “${lockfilename}”;

}
undef $lockneedsremoving;
}

sub createlock
{
sysopen(LOCKFILE, “${lockfilename}”, O_RDWR|O_CREAT) or print (“Cannot open lockfile ${lockfilename}: $!”);
unless (flock(LOCKFILE, LOCK_EX|LOCK_NB))
{
print “Another update is in place.¬† Please try in a minute…”;
return 0;
}

$lockneedsremoving=1;
return 1;
}

[/perl]