NAME

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

SYNOPSIS

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
}

DESCRIPTION

This module is used to easy and portable file locking.

EXAMPLES

# ---
# 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"; }

AUTHOR

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