我通过fcntl
使用POSIX 强制文件锁。我想知道那些锁是否是可重入的,即。一个进程可以获得它已经拥有的锁吗?
答案 0 :(得分:4)
通过fcntl
的通知锁在每个进程基础上,只是在给定进程的文件上累积锁定的时间间隔。也就是说,由应用程序来跟踪间隔,并且对于间隔的任何解锁调用都将解锁它,无论对该间隔进行了多少次锁定调用。
更糟糕的是,关闭文件的任何文件描述符会取消文件上的所有锁定:
除了被显式F_UNLCK删除外,还有记录锁 在进程终止或关闭进程时自动释放 文件描述符,指向保存锁的文件。这很糟糕:这意味着进程可能会丢失锁定 像文件一样 / etc / passwd或/ etc / mtab由于某种原因,库函数决定打开,读取和关闭它。