use strict; use File::Copy; use Fcntl ':flock'; # import LOCK_* constants my $status_file = "/tmp/flocktest"; open(STATUS, "+<$status_file") || die "Can't open file"; print "getting lock...\n"; flock(STATUS,LOCK_EX) || die "Can't lock file"; print "waiting...\n"; sleep 10; print "copying file...\n"; # copy(\*STATUS,"/tmp/foo"); copy("$status_file","/tmp/foo"); print "finished copy, waiting....\n"; sleep 10; #### % ./test.pl getting lock... waiting... % ./test.pl getting lock... copying file... finished copy, waiting... % waiting... copying file... finished copy, waiting... % #### % ./test.pl getting lock... waiting... % ./test.pl getting lock... copying file... finished copy, waiting... waiting... copying file... finished copy, waiting... % %