在Perl中,如何测试另一个Perl程序打开的文件?我需要在第二个程序开始之前完成第一个程序。
答案 0 :(得分:12)
alt text http://musicritics.com/wp/wp-content/uploads/2009/05/20061129morbo.gif
文件不能正常工作!
但严肃地说,人们,flock的咨询锁通常是你能做的最好的。没有办法保证没有其他程序想要同时读取或写入文件。
答案 1 :(得分:5)
您可以使用flock
来协调这两个程序:第一个程序将锁定文件,第二个程序也会尝试获取锁定,它会阻塞直到第一个程序发布锁。
答案 2 :(得分:5)
您的系统上有flock()吗?否则,两个程序必须同步,它们可以通过管道或套接字进行通信,或者通过文件的存在/不存在进行通信。
如果你在类Unix系统上,另一个方向是使用lsof输出。
我认为第一个程序启动第二个程序是不可行的。
答案 3 :(得分:4)
答案 4 :(得分:4)
如果您在Windows上运行,则可以使用dwShareMode
0
直接致电CreateFile
。
根据MSDN:
如果文件或设备请求删除,读取或写入访问权限,则阻止其他进程打开文件或设备。
Win32API::File可以访问此次来电。
答案 5 :(得分:0)
要专门查看文件是否已打开或正在使用,如果您使用的是unix,则lsof
命令的包装器会列出打开的文件:Unix::Lsof
答案 6 :(得分:0)
如果您使用的是Unix,也可以拨打fuser。
答案 7 :(得分:0)
我可能误解了上下文,我的评论可能会限制您的可用性,但取决于您使用代码/开启的内容 - 使用串行队列来确保以可预测的顺序执行的任务可能是一个选项。您的应用程序(用Perl编写)需要显式创建和管理串行队列。有关更多详细信息,请参阅以下链接:GCD