Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

I have problem with using flock in my program. It doesn't lock the file even though I use LOCK_EX (2). I invoked the progran twice and both instances locked the file sucessfully (I expect one to fail) but neither one can unlock the file. I think my system support BSD otherwise I would had a fatal error. I also tried to look into lockf but have no idea how to use it in perl. Any idea? ps. The file I try to lock is not on NFS and is local to the machine.

Replies are listed 'Best First'.
Re: Problem with flock
by turnstep (Parson) on Mar 24, 2000 at 22:59 UTC

    (Don't worry about lockf: you want flock)
    There are a few things we need to know:

    • What system is this on?
    • Are you opening it with write access?
    • How do you know that the lock is succeeding?
    • How do you know it is not locking the file?
    • Does $! tell you anything?
    • Is this a cgi script?

    Things to try:

    • Make sure your system supports file locking!
    • Check the return values of everything
    • Open with explicit read/write access
    • Try shared and exclusive locks

    Here's simple code for a lock:

    open(LOCKME, "+< $file_to_lock") or die "No open $!\n"; flock(LOCKME, LOCK_EX) or die "No lock $!\n"; sleep(20); ## Have another process test the lock now... close(LOCKME) or die "No close $!\n";
    Note that close dissolves the lock for you, so you don't
    need to use flock to unlock it.
RE: Problem with flock
by turnstep (Parson) on Mar 24, 2000 at 22:54 UTC
    This post WAS incorrectly formatted - please see the next.