Curt Sampson <cjs@cynic.net> wrote:
> At any rate, it seems to me highly unlikely that, since the child has
> the *same* descriptor as the parent had, that the lock would
> disappear.
It depends on the lock function. After fork():
o with flock() the lock continues to be held, but will be unlocked if any child process explicitly unlocks it
o with fcntl() the lock is not inherited in the child
o with lockf() the standards and manual pages don't say
Boring reference material follows.
flock
=====
From the NetBSD manual page:
NOTES Locks are on files, not file descriptors. That is, file descriptors du- plicated through dup(2) or fork(2)
donot result in multiple instances of a lock, but rather multiple references to a single lock. If a process
holdinga lock on a file forks and the child explicitly unlocks the file, the parent will lose its lock.
The Red Hat Linux 8.0 manual page has similar wording. (No standards
to check here -- flock() is not standardised in POSIX, X/Open, Single
Unix Standard, ...)
fcntl
=====
The NetBSD manual page notes that these locks are not inherited by
child processes:
Another minor semantic problem with this interface is that locks are not inherited by a child process created
usingthe fork(2) function.
Ditto the Single Unix Standard versions 2 and 3.
lockf()
=======
The standards and manual pages that I've checked don't discuss
fork() in relation to lockf(), which seems a peculiar ommission
and makes me suspect that behaviour has varied historically.
In practice I would expect lockf() semantics to be the same as
fcntl().
Regards,
Giles