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).