locking files
Donn Cave
donn at u.washington.edu
Wed Feb 21 13:40:57 EST 2001
More information about the Python-list mailing list
Wed Feb 21 13:40:57 EST 2001
- Previous message (by thread): FW: newbie - concatanating 2 lists
- Next message (by thread): locking files
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Quoth Joseph Holland King <insanc at cc.gatech.edu>: | Joseph Holland King <insanc at cc.gatech.edu> wrote: | : is there anyway to lock a file so that two different programs cannot access | : the file at the same time. ie, my python module is editting file foo, and | : at the same time user x (or program x) tries to read from it. is there | : anyway that the python module can prevent x from accessing the file for | : a given amount of time? | | to clarify: i am on a unix system, i have tried to use flock however when i | locked the file i was still able to read, write and copy the file, none of | which i want to happen while the file is locked. while using the flock | method i was using LOCK_EX. also the third party program is not going to be | controlled, written, or have anything to do with mine. am i just not using | flock properly or is there something else that might do the job? thank you. Basically, that's how file locking works. It's advisory, for the benefit of software components that are designed to work together. But there is a variation that you can find supported on some filesystems, where in combination with an obscure permission mode on the file the lock becomes mandatory and effective against any and all I/O. The permission trick is setgid & not group execute, i.e., (oldperm | 02000) & ~010. It works for me on Digital UNIX local (AdvFS) filesystem. I didn't try on NFS, but from the documentation I doubt that it will work there. It does not work on NetBSD 1.5 local filesystem. Where it does work, you must use fcntl() or lockf() to obtain the lock, not a genuine flock(). While I'm here, let me add a little note about flock(), for the benefit of those whose UNIX platforms don't have the deluxe man pages that you get on NetBSD for example. There are two kinds of locks, one obtained by Berkeley flock() and the other by POSIX 1003.1 fcntl(). The lockf() function is a different, X/Open interface that interoperates with fcntl(). Many modern platforms do not support a genuine flock(). Some of them provide an flock() function that is actually implemented with fcntl(), which means that the semantics of the lock are per fcntl() and not flock(). Python follows this trend and does the same thing if there's no flock(2), so it's up to the programmer to find out what kind of lock fcntl.flock() really gets, if the difference is important. Donn Cave, donn at u.washington.edu
- Previous message (by thread): FW: newbie - concatanating 2 lists
- Next message (by thread): locking files
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list