
NL::File::Lock - File locking (based on lockfiles)

use NL::File::Lock;
# We will create locks for that file:
my $filename = 'test_file.txt';
# Writing all lockfiles to '/tmp' directory:
&NL::File::Lock::init('/tmp');
# If no 'NL::File::Lock::init' called - all lockfiles
# will be at the same directorys as files
# ---
# Lock for writing (only one process can write)
# 'timeout' - time to wait lock
# 'time_sleep' - time to sleep between locking retrys
if (&NL::File::Lock::lock_write($filename, { 'timeout' => 10, 'time_sleep' => 0.1 } )) {
# File locked
# ... code ...
&NL::File::Lock::unlock($filename);
}
else {
# Unable to lock file
}
# ---
# Lock for reading (many processes can read)
# 'timeout' - time to wait lock
# 'time_sleep' - time to sleep between locking retrys
if (&NL::File::Lock::lock_read($filename, { 'timeout' => 10, 'time_sleep' => 0.1 } )) {
# File locked
# ... code ...
&NL::File::Lock::unlock($filename);
}
else {
# Unable to lock file
}

This module is used to easy and portable file locking.

# ---
# Lock for writing (only one process can write)
my $filename = 'test_file.txt';
# 'timeout' - time to wait lock
# 'time_sleep' - time to sleep between locking retrys
if (&NL::File::Lock::lock_write($filename, { 'timeout' => 10, 'time_sleep' => 0.1 } )) {
print "+Locked EX (write)...\n";
sleep(5);
&NL::File::Lock::unlock_not_unlink($filename);
print "-UnLocked for some time...\n";
sleep(5);
if (&NL::File::Lock::lock_write($filename, { 'timeout' => 10, 'time_sleep' => 0.1 } )) {
print "+Locked EX (write)...\n";
sleep(5);
&NL::File::Lock::unlock($filename);
print "-UnLocked forever...\n";
sleep(5);
}
else { print "Unable to lock EX (write) again...\n"; }
}
else { print "Unable to lock EX (write)...\n"; }
# ---
# Lock for reading (many processes can read)
my $filename = 'test_file.txt';
# 'timeout' - time to wait lock
# 'time_sleep' - time to sleep between locking retrys
if (&NL::File::Lock::lock_read($filename, { 'timeout' => 10, 'time_sleep' => 0.1 } )) {
print "+Locked SH (read)...\n";
sleep(5);
&NL::File::Lock::unlock_not_unlink($filename);
print "-UnLocked for some time...\n";
sleep(5);
if (&NL::File::Lock::lock_read($filename, { 'timeout' => 10, 'time_sleep' => 0.1 } )) {
print "+Locked SH (read)...\n";
sleep(5);
&NL::File::Lock::unlock($filename);
print "-UnLocked forever...\n";
sleep(5);
}
else { print "Unable to lock SH (read) agian...\n"; }
}
else { print "Unable to lock SH (read)...\n"; }

Nickolay Kovalev, http://resume.nickola.ru Email: nickola_code@nickola.ru