in reply to Fcntl() and multiple filehandles
Everybody hates this, but it's necessary for backward compatibility. To quote the FreeBSD man page:
This 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) system call.
Now, if your processes are the only ones locking this file (or files) and if they are all running on the same computer, you could use another file (that is not on NFS) for locking. I fear that your file is on NFS for a reason, though, which may mean that it is accessed from multiple computers.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Fcntl() and multiple filehandles
by TedPride (Priest) on Sep 21, 2004 at 00:08 UTC | |
by Anonymous Monk on Sep 21, 2004 at 11:28 UTC |