[Python-ideas] Implementation of shutil.move

Christian Heimes lists at cheimes.de
Fri Aug 12 18:48:39 CEST 2011


Am 12.08.2011 18:37, schrieb Masklinn:
> On 2011-08-12, at 17:03 , Christian Heimes wrote:
>> Am 12.08.2011 16:55, schrieb Masklinn:
>>> On 2011-08-12, at 16:48 , David Townshend wrote:
>>>> My understanding of os.O_EXCL is that it locks the file from changes by any
>>>> other process.
>>> That, *could* be O_EXLOCK, but I'm not too sure.
>>>
>>> O_EXCL does not do anything in and of itself, it fails the file opening if combined with O_CREAT. That's it (from man 2 open):
>>>
>>>    O_EXCL          error if O_CREAT and the file exists
>>
>> The man page open(2) doesn't mention O_EXLOCK. It must belong to another
>> low level function.
> Nope, got it from open(2), but it's apparently a bsd extension: http://lkml.indiana.edu/hypermail/linux/kernel/0005.1/1288.html
> 
> This information (that it's an extension) is present in the OpenBSD open(2) page, but I checked it on an OSX machine where it's not specified. Sorry.
> 
> It's an atomic `flock(fd, LOCK_EX)` (or LOCK_SH) built into open(2) to avoid the unlocked open hole between the open(2) and flock(2) calls.

Ah, I've checked the open(2) man page on Linux. Should have mentioned
the OS ... sorry, too.

Anyway flock()s are only advisory (cooperative) locks and not mandatory
locks. Although some Unices have support for mandatory locks, they can
be circumvented with unlink().

Christian



More information about the Python-ideas mailing list