On May 22, 2014, at 8:51 AM, Matthew LeRoy <[email protected]> wrote:

> Does anyone have any idea if there is a way to get the document architecture 
> to lock a document file when it is opened?

If you implement the lower-level read/write methods in NSDocument, you have 
full control over opening and closing the file. You can then make whatever 
filesystem calls you want to lock/unlock it.

> When I say “lock”, I’m talking about an exclusive file lock at the filesystem 
> level, as in no other user or process can open, move, or delete the file.

There’s no such thing in standard Unix. The closest thing is “advisory” locks 
(i.e. flock(2)), which are opt-in and can be ignored, and only prevent 
modifying the file, not opening/moving/deleting it.

HFS+ does have extended attributes that, I _think_ include some sort of 
“immutable” option, but from what you say below I don’t think that’s relevant 
here.

> This causes all kinds of kooky and undesired behavior if a document on a 
> remote filesystem is first opened in the Mac version (which does not lock the 
> file), then opened concurrently by the Windows version (which locks the file).

OK, here it gets even messier, because you’re talking about locking files on a 
file server. This involves the semantics of the file sharing protocol (you 
didn’t specify what it is), of OS X’s client implementation of that protocol, 
and of the underlying filesystem of the disk volume being shared. There are 
significant differences between the behavior of NFS, AFP and SMB, and between 
different versions of those, and different versions of OS X connecting to them 
… it’s quite a rat-hole. I’ve seen people give vehement advice to _never_ use 
SQLite databases on shared volumes, for example, because problems with file 
locking can easily cause database corruption.

At a minimum you’re going to need to describe exactly what software is involved 
on both sides, and what file server protocol is in use.

—Jens
_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to