Dir-Flock
view release on metacpan or search on metacpan
lib/Dir/Flock.pm view on Meta::CPAN
=head3 functional semantics
The core L<Dir::Flock::lock|/"lock"> and
L<Dir::Flock::unlock|/"unlock"> functions begin and end advisory
locking on a directory. All of the other semantics are implemented in
terms of these functions.
$ok = Dir::Flock::lock( "/some/path" );
$ok = Dir::Flock::lock( "/some/path", $timeout );
$ok = Dir::Flock::unlock( "/some/path" );
=head3 flock semantics
The function L<Dir::Flock::flock|/"flock"> emulates the Perl
L<flock|perlfunc/"flock"> builtin, accepting the same arguments
for the operation argument.
use Fcntl ':flock';
$ok = Dir::Flock::flock( "/some/path", LOCK_EX );
...
$ok = Dir::Flock::flock( "/some/path", LOCK_UN );
=head3 scope-oriented semantics
The L<Dir::Flock::lockobj|/"lockobj"> function returns an
object representing a directory lock. The lock is released
when the object goes out of scope.
{
my $lock = Dir::Flock::lockobj( "/some/path" );
...
} # $lock out of scope, lock released
=head3 BLOCK semantics
The L<Dir::Flock::sync|/"sync"> accepts a block of code or other
code reference, to be executed with an advisory lock on a
directory.
Dir::Flock::sync {
... synchronized code ...
} "/some/path";
=head1 FUNCTIONS
Most functions return a false value and set the package variable
C<$Dir::Flock::errstr> if they are unsuccessful.
=head2 lock
=head2 lock_ex
=head2 $success = Dir::Flock::lock( $directory [, $timeout ] )
=head2 $success = Dir::Flock::lock_ex( $directory [, $timeout ] )
Attempts to obtain an I<exclusive> lock on the given directory. While
the directory is locked, the C<lock> or C<lock_sh> call on the
same directory from
other processes or threads will block until the directory is unlocked
(see L<"unlock">). Returns true if the lock was successfully acquired.
Note that the first argument is a path name, not a directory I<handle>.
If an optional C<$timeout> argument is provided, the function will
try for at least C<$timeout> seconds to acquire the lock, and return
a false value if it is not successful in that time. Use a timeout of
zero to make a "non-blocking" request for an exclusive lock.
=head2 lock_sh
=head2 $success = Dir::Flock::lock_sh( $directory [, $timeout ] )
Attempts to obtain a I<shared> lock on the given directory.
While there are shared locks on a directory, other calls to C<lock_sh>
may also receive a shared lock on the directory but calls to
C<lock>/C<lock_ex> on the directory will block until all
shared locks are removed.
If an optional C<$timeout> argument is provided, the function will
try for at least C<$timeout> seconds to acquire the shared lock, and
return a false value if it is not successful in that time.
Use a timeout of zero to make a "non-blocking" shared lock request.
=head2 unlock
=head2 $success = Dir::Flock::unlock( $directory )
Releases the exclusive or shared lock on the given directory held
by this process. Returns a false value if the current process did
not possess the lock on the directory.
=head2 getDir
=head2 $tmp_directory = Dir::Flock::getDir( $root [, $persist] )
Creates a temporary and empty directory in a subdirectory of C<$root>
that is suitable for use as a synchronization directory. The directory
will automatically be cleaned up when the process that called this
function exits, unless the optional C<$persist> argument is set to
a true value. The C<$persist> argument can be used to create a
directory that can be used for synchronization by other processes
or on other hosts after the lifetime of the current program.
If the input to C<getDir> is a filename rather than a directory name,
a new subdirectory will be created in the directory where the file
is located.
=head2 flock
=head2 $success = Dir::Flock::flock( $dir, $op )
Acquires and releases advisory locks on the given directory
with the same semantics as the Perl builtin
L<flock|perlfunc/"flock"> function.
( run in 1.294 second using v1.01-cache-2.11-cpan-98e64b0badf )