triptico.com

Angel Ortega's Site
Ángel Ortega is a programmer, writer, composer and illustrator based in El Casar (Guadalajara, Spain). Author of the award-winning Minimum Profit text editor for programmers, main musician of the Ann Hell band and many other things.

File locking in Perl

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.

Related

Add a comment

Author:

Comment: