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

NAME

DB_File::Lock - Locking with flock wrapper for DB_File

SYNOPSIS

 use DB_File::Lock;

 $locking = "read";
 $locking = "write";
 $locking = {
     mode            => "read",
     nonblocking     => 0,
     lockfile_name   => "/path/to/shared.lock",
     lockfile_mode   => 0600,
 };

 [$X =] tie %hash,  'DB_File::Lock', [$filename, $flags, $mode, $DB_HASH], $locking;
 [$X =] tie %hash,  'DB_File::Lock', $filename, $flags, $mode, $DB_BTREE, $locking;
 [$X =] tie @array, 'DB_File::Lock', $filename, $flags, $mode, $DB_RECNO, $locking;

 ...use the same way as DB_File for the rest of the interface...

DESCRIPTION

This module servers as a wrapper which adds locking to the DB_File module. One new argument is added to the tie command which specifies the locking desired. The $locking argument may be either a string to specify locking for read or write, or a hash which can specify more information about the lock and how the lockfile is to be created.

The filename used for the lockfile defaults to "$filename.lock" (the filename of the DB_File with ".lock" appended). Using the hash form of the locking information, one can specify their own lock file with the "lockfile_name" hash key. This is useful for locking multiple resources with the same lockfiles.

The "nonblocking" hash key determines if the flock call on the lockfile should block waiting for a lock, or if it should return failure if a lock can not be immediately attained. If "nonblocking" is set and a lock can not be attained, the tie command will fail. Currently, I'm not sure how to differentiate this between a failure form the DB_File layer.

The "lockfile_mode" hash key determines the mode for the sysopen call in opening the lockfile. The default mode is to allow anyone that can read or write the DB_File permission to read and write the lockfile. (This is because some systems may require that one have write access to a file to lock it for reading, I understand.) The umask will not be applied to this mode.

Note: One may import the same values from DB_File::Lock as one may import from DB_File.

AUTHOR

David Harris <dharris@drh.net>

Helpful insight from Stas Bekman <sbekman@iil.intel.com>

SEE ALSO

DB_File(3).