File locking in Perl is done with the flock() function. It's portable among architectures, is advisory-only and locks full files.
It accepts two arguments: a file handle and an operation id. As expected, it allows only one writer or many simultaneous readers, with no wait. Locks are automatically released on closing. The usage is simple:
1. Open the file (for reading or writing).
2. Call flock() with the file handle, and a second argument of 1 (if reading) or 2 (if writing).
3. Do whatever operations you do to the file.
4. Close it.
And that's it. The magic numbers 1 and 2 can also be used as LOCK_* constants imported from the Flock module. The perldoc documentation is comprehensive, take a look at it.
Example reader:
open F, 'index.db'; # open for reading
# lock file. If a writer has it locked, it will
# wait until released. Many readers will read the
# file simultaneously without blocking.
flock F, 1;
while (<F>) {
# do things...
}
# lock is released
close F;
And a writer:
open F, '>index.db'; # open for writing # lock file for writing. If there is another reader # or writer using the lock, it will block until # released. flock F, 2; # file is now locked # write stuff to the file... # lock is released; any readers or writers waiting # will unblock and go on with its business close F;
As these locking semantics are advisory-only, anyone can screw everything by writing without locking, so take care.