我通过fcntl
使用POSIX
强制性
文件锁定。我想知道这些锁是否是可重入的,即。一个进程能获得它已经拥有的锁吗?POSIX文件锁是否可重入?
回答
通过fcntl
的咨询锁定位于每个进程基础上,并且仅为给定进程累积文件上的锁定间隔。也就是说,应用程序需要跟踪时间间隔,并且任何时间间隔的解锁呼叫都会将其解锁,而不管该时间间隔内有多少次锁定呼叫。
更糟的是,对于该文件的任何文件描述符的收盘取消对文件中的所有锁:
除了通过明确的F_UNLCK被删除,进程终止时记录锁 自动释放或如果它关闭任何参考持有锁的文件的 文件描述符。这很糟糕:这意味着某个进程可能会丢失 文件(如 /etc/passwd或/ etc/mtab)上的锁,因为某些原因库函数决定打开,读取并关闭它。
您不必自己追踪所有权。由于'fcntl'锁定了记录所有者,并且有一个API来读取当前所有者,所以您可以在锁定之前简单地查看您是否是所有者,如果是,则跳过锁定/解锁步骤。 –
@R ..你的意思是结构的'l_pid'字段?这不适用于通过同一个进程跟踪多个锁,它只会告诉您(其中一个)会阻止您的进程,而不是如果您已经拥有同一进程的范围(部分)。 –
如果你正在复杂地使用重叠范围,那么是的,我同意。我假设整个文件锁或非重叠范围的锁,你可以假设,如果范围内的任何内容被锁定,整个范围被一个进程锁定。 –
- 1. BSD/Posix套接字是否可重入?
- 2. POSIX可重入函数
- 3. 如何确定POSIX函数是否可重入?
- 4. 是否可以读取锁定文件?
- 5. 运行时重命名php文件 - 是否可以锁定?
- 6. 是可重入锁是否完全替换同步?
- 7. 可重入锁定
- 8. 检查该文件是否可由当前用户在POSIX shell中写入
- 9. 扩展类时是否存在可重入锁?
- 10. 是否使可重入锁定静态并使其成为互斥锁?
- 11. Z80 NMI是否可重入?
- 12. 强制解锁一个可重入锁
- 13. 可重入锁定问题
- 14. OpenProcess是否总是写入锁定文件?
- 15. 锁定已锁定并进一步尝试锁定不会阻止:是否C#锁可重入?
- 16. POSIX文件系统ACL是否可以在模式为`0600`的文件上授予组/世界写入权限?
- 17. 是否可以解锁SIM卡,并让软件输入密码
- 18. 是Fortran 77 POSIX是否符合? - 写二进制文件
- 19. 它是否可以锁定?
- 20. 是否可以导入.pyo文件
- 21. 是否可以在放入apk文件中写入文件?
- 22. MSAccess - TransferDatabase - 文件锁定是否打开?
- 23. File.Copy(source,dest)是否锁定文件?
- 24. php是否包含锁定文件?
- 25. 重定向posix文件调用C
- 26. 可重入锁 - 可能的输出?
- 27. neo4j嵌入式驱动程序是否锁定db文件?
- 28. 是否需要锁定写入IIS中的文件?
- 29. Golang从文件中读取 - 是否可以锁定?
- 30. 正确的锁定/解锁使用Java的可重入锁
您确定自己的意思是*必填*文件锁吗?上次我看,POSIX不支持强制锁定。 – cdarke
@cdarke Oups!我的意思是咨询......感谢您的报告。 – paradigmatic
没有'fcntl'锁不可重入。您必须使用有效检查手动包装锁定和解锁代码。而'fcntl'行为可能会因您的实施系统而异。 – askmish