NL::File::Lock - Extended file locking


NAME

NL::File::Lock - Extended 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 lock files
        # will be at the same directorys as files
        # ---
        # Lock for writing (only one process can write)
        # 'timeout' - time to wail 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 wail 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 powerful, easy and portable file locking.


EXAMPLES

        # ---
        # Lock for writing (only one process can write)
        my $filename = 'test_file.txt';
        # 'timeout' - time to wail 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 wail 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

 NL::File::Lock - Extended file locking