服务器 频道

Perl:访问文件时加锁-计数器

  【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! "
;
}

0
相关文章