locking files on freebsd

Donn Cave donn at u.washington.edu
Mon Apr 2 14:11:59 EDT 2001


Quoth Haris Lekatsas <Haris_member at newsranger.com>:
| Hello,
| I have a problem with locking files. The following code will work on several OS
| but it seems
| to fail on FreeBSD giving an IOError.
| Any ideas?
|
| f = open('filename', 'w')
| fd = f.fileno()
| flock = struct.pack('2h8l', FCNTL.F_WRLCK, 0, 0, 0, 0, 0, 0, 0, 0, 0)
| fcntl.fcntl(fd, FCNTL.F_SETLKW, flock)

The struct is the wrong size (and order.)  Look at /usr/include/fcntl.h
to see the struct layout (at least, that's where I find it on NetBSD 1.5,
whose struct comes out to only 24 bytes, as opposed to the 36 bytes
generated by your format.)

If it works for you, it would be easier to use fcntl.lockf().  The
Python implementation of that function handles the flock struct itself,
and borrows the API of the Berkeley flock() function.  The lockf()
function is X/Open standard, and works with the same locks (and same
twisted semantics) as the fcntl POSIX 1003.1 F_WRLCK;  I would say
it's a wrapper around the latter, but I'm not sure it always is.

	Donn Cave, donn at u.washington.edu



More information about the Python-list mailing list