The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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