【IT168 服务器学院】此例子主要用于需要文件加锁的脚本,防止多用户同时访问时出错
#!/usr/bin/perl -w
#count file: 0
use strict;
use Fcntl qw(:flock);
my $sem="/tmp/sem.sem";
sub get_lock {
open (SEM, ">$sem") || die "create sem file failed : $!";
if (! flock(SEM, (LOCK_EX|LOCK_NB))) {
print "Can not get the lock: $! ";
} else {
flock(SEM, LOCK_EX) || die "Lock failed: $!";
if (flock(SEM, (LOCK_EX|LOCK_NB))) {
print "Lock succeed! ";
}
}
}
sub release_lock {
close (SEM);
}
sub read_data {
open(FH, "count") || die "$!";
my(@DATA)=<FH>;
chomp @DATA;
close(FH);
return(@DATA);
}
sub write_data {
my(@DATA)=@_;
open (FH, ">count") || die "$!";
foreach (@DATA) {
print FH "$_ ";
}
close(FH);
}
#main#
get_lock();
if (flock(SEM, (LOCK_EX|LOCK_NB))) {
my @count=read_data();
$count[0]=$count[0]+1;
print "$count[0] ";
write_data(@count);
release_lock();
print "Count OK! ";
} else {
print "Please try later! ";
}