POSIX文件锁是否可以重入?

par*_*tic 5 c unix posix locking fcntl

我正在使用POSIX 强制文件锁fcntl.我想知道那些锁是否是可重入的,即.一个进程可以获得它已经拥有的锁吗?

Jen*_*edt 5

咨询锁fcntl是基于每个进程的,并且只是在给定进程的文件上累积锁定间隔。也就是说,由应用程序来跟踪间隔,并且间隔的任何解锁调用都将解锁它,无论该间隔进行了多少次锁定调用。

更糟糕的是,关闭文件的任何文件描述符都会取消文件上的所有锁定:

除了通过显式 F_UNLCK 删除记录锁之外,当进程终止或关闭任何引用持有锁的文件的文件描述符时,记录锁也会自动释放。这很糟糕:这意味着当由于某种原因库函数决定打开、读取和关闭文件(例如 /etc/passwd 或 /etc/mtab)时,进程可能会失去对文件的锁定。