回答
您应该在两个脚本中使用flock
。这会在文件上放置一个标志,以便通知其他脚本文件正在使用中。该标志有意使用fclose
或在脚本末尾隐式关闭。
虽然flock是答案(或`dio_fcntl`),flock只提供一个*咨询*锁定。你必须在任何地方与羊群协调**。任何其他不使用flock的脚本都可以随时操作该文件。 – jasonbar 2011-01-09 16:06:18
@jasonbar因此通过“在两个脚本”。在您的第一条评论之后,我已经更新了我的答案,以反映您的出色观点。 – lonesomeday 2011-01-09 16:07:06
我想说的只是使用文件打开功能,如果它返回false,那么文件显然仍然是打开的。
您可以根据需要随意调用同一文件中的fopen()多次, 。 – jasonbar 2011-01-09 16:06:58
如果您使用的是Unix,您的系统可能安装了lsof(“LiSt打开文件”)命令。 输出中的“FD”列指示文件是打开读取, 写入,还是两者都打开。
我想指出,任何形式的“检查,看看文件X是否开放的写作过程,如果是这样做......”的过程是受竞争条件。一些其他进程 可能会在检查完成后,但在操作开始之前打开文件。
- 1. 如何知道图像是否仍然存在
- 2. Linux上的Java写入文件被删除,但我仍然可以写入它
- 3. 脚本如何知道用户是否可以输入?
- 4. 可可如何知道文件是否被编辑/关闭
- 5. EntitySpaces的文档是否仍然可用?
- 6. 如何检查文件是否仍在写入?
- 7. 如何检查是否可以将文件写入目录?
- 8. 如何判断文件是否可以从脚本写入?
- 9. 如何知道一个文件是否使用PHP完全写入?
- 10. C#,Windows 7:如何可靠地检查进程是否仍在写入文件?
- 11. 可以将可填写的PDF文件转换为XPS文件并仍然是可填写的表单?
- 12. 我可以知道一个JavaScript文件是否已被执行?
- 13. 如何知道是否使用了document.createElement创建的元素仍然存在
- 14. 你如何知道CA是否可信?
- 15. 如何知道url是否可用?
- 16. 如何知道fastcgi_finish_request()是否可用?
- 17. 如何知道ChannelWriter是否写入字节?
- 18. 如何知道一个jar文件是否可以在Android上运行?
- 19. 是否仍然可以在Grails中安装全局插件
- 20. grep如何知道它正在写入输入文件?
- 21. 是否可以知道上传文件的类型是否为图像?
- 22. 是否可以同时读写文件?
- 23. 如何确定文件是否仍然通过ftp传输
- 24. 如何知道是否
- 25. 将数据写入文件,但文件仍然包含NULL
- 26. Rails,如何知道特定请求是否仍在运行
- 27. 我如何知道CUDA是否可以使用?
- 28. 如何知道一台机器是否可以用c#ping?
- 29. 如何知道某个类是否可以用作静态类?
- 30. 如何知道算法是否可以做得更快
看看flock示例:http://www.tuxradar.com/practicalphp/8/11/0 – 2011-01-09 16:01:42