[fcntl]how to lock a file

Donn Cave donn at u.washington.edu
Tue Apr 11 12:50:41 EDT 2006


In article <e1gf6o$74h$1 at emma.aioe.org>, marcello <marcs2006 at gmail.com> 
wrote:

> Carl J. Van Arsdall wrote:
>  > [...]
>  >
>  > If you end up having problems working with the python fcntl module let
>  > me know your configuration I'd be interested to see if anyone else had
>  > similar problems to me.
> 
> 
> Python 2.2.3 (#1, Aug  8 2003, 08:44:02)
> [GCC 3.2.3 20030502 (Red Hat Linux 3.2.3-13)] on linux2
> kernel 2.4.21-4.0.1.ELsmp
> glibc-2.3.2-95.6
> 
> 
> 
> What else can i add?

Maybe something about the problem?

There are four functions in that module - fcntl, flock,
ioctl, lockf.  Which one were you using?  What were you
trying to do with it?

Did it raise an exception?  Returned but didn't effectively
interlock against other processes -- on the same host, on
other hosts?  Failed to return when the file should have
been OK to lock?

Is it possible that locks would work fine in a test program,
but fail in your application due to brain damaged POSIX
filesystem locking semantics?

We can start with stuff you probably already know.

- The Berkeley flock(2) function is great but is not
  supported by NFS.

- fcntl(2) F_SETLK etc. are supported by NFS, but have
  extremely inconvenient semantics, part of the POSIX
  1003.1 specifications, particularly the part about losing
  a lock on ANY close(), even if the file descriptor remains
  open for fcntl(2)'s caller.

- lockf(3) is fcntl(2).

- Some platforms provide an flock() that is actually
  fcntl(2), can't think of the right words to express how
  deplorable that practice is.

- On the rare platform that doesn't do this - where they
  are honest enough to just admit that they don't support
  flock() - Python implements fcntl.flock() with fcntl(2),
  I guess on the theory that you can't have enough brain
  damage.  The worst case would be if Python's configure
  missed a bona fide flock(2), which is unlikely but may
  be worth checking if you use flock(2) for a reason.

Donn Cave, donn at u.washington.edu



More information about the Python-list mailing list