package LockFolder; use strict; =head1 AUTHOR Peter Baumann =head1 EXAMPLE =cut #################### # sub new{ my $reffile; my $type=shift; use Fcntl qw/:DEFAULT :flock/; my $field={}; my $directory=shift; if ($directory eq ''){die "Directory does not exists: $directory";} my $reffile="$directory/file.lock"; $field->{reffile}=$reffile; $field->{directory}=$directory; if (!-e "$reffile"){ open (my $OUT,">",$reffile) || die "Can not create lockfile: $!"; chmod $reffile,0666; print $OUT "0\n"; close $OUT; } open (my $datlock,'<',$reffile); #my $datlock=''; $field->{datlock}=\$datlock; bless $field,$type; return $field; } ######################### # lockt Verzeichnis ################################################## sub LockFolder{ use Fcntl qw/:DEFAULT :flock/; my $objekt=shift; my $reffile=$objekt->{reffile}; my $datlock=${$objekt->{datlock}}; my $lock; open ($datlock,"<",$reffile); { redo if (!flock($datlock,LOCK_EX)); } } ############################## #unlockt Verzeichnis # ###################################### sub UnlockFolder{ my $objekt=shift; my $datlock=${$objekt->{datlock}}; close $datlock; } 1; |
use LockFolder; my $lock=LockFolder->new($Name_des_ordners); $lock->LockFolder(); open (my $out,'>',$Name_des_ordners."/datei.txt"); print $out "Testtext"; close $out; $lock->UnlockFolder(); # ... weiter im Programm |
package LockFolder; use strict; =head1 AUTHOR DONT USE IT!!! =cut #################### # sub new{ my $reffile; my $type=shift; use Fcntl qw/:DEFAULT :flock/; my $field={}; my $directory=shift; if ($directory eq ''){die "Directory does not exists: $directory";} my $reffile="$directory/file.lock"; $field->{reffile}=$reffile; $field->{directory}=$directory; bless $field,$type; return $field; } ######################### # lockt Verzeichnis ################################################## sub LockFolder{ use Fcntl qw/:DEFAULT :flock/; my $objekt=shift; my $reffile=$objekt->{reffile}; my $lock; { redo if (-e $reffile); last; } open (my $out,">",$reffile) || die "can not open $reffile: $!"; close $out; } ############################## #unlockt Verzeichnis # ###################################### sub UnlockFolder{ my $objekt=shift; my $reffile=$objekt->{reffile}; unlink $reffile; } 1; |
use LockFolder; $lock=LockFolder->new("test"); for ($i=0;$i<1000;$i++){ $lock->LockFolder; open (in,"<test/test.txt"); $cou=<in>; close in; $cou++; open (out,">test/test.txt"); print out $cou; close out; $lock->UnlockFolder; } print $cou; |