[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: flock() and sendmail



On Fri, 17 Nov 2006 19:54:13 +0100, Kurt Roeckx <kurt@roeckx.be>
wrote:

>I actually see no good reason to want to use flock() over fcntl().


Maybe because the fcntl()

>interface follows the completely stupid semantics of System V and
>IEEE Std 1003.1-1988 (``POSIX.1'') that require that all locks associated
>with a file for a given process are removed when any file descriptor for
>that file is closed by that process.  This semantic means that applica-
>tions must be aware of any files that a subroutine library may access.
>For example if an application for updating the password file locks the
>password file database while making the update, and then calls
>getpwnam(3) to retrieve a record, the lock will be lost because
>getpwnam(3) opens, reads, and closes the password database.  The database
>close will release all locks that the process has associated with the
>database, even if the library routine never requested a lock on the data-
>base.  Another minor semantic problem with this interface is that locks
>are not inherited by a child process created using the fork(2) function.
>The flock(2) interface has much more rational last close semantics and
>allows locks to be inherited by child processes.  Flock(2) is recommended
>for applications that want to ensure the integrity of their locks when
>using library routines or wish to pass locks to their children. 

http://leaf.dragonflybsd.org/cgi/web-man?command=fcntl&section=2




Reply to: