如何检查文件是否由Perl中的其他程序打开?

时间:2009-10-30 19:41:15

标签: perl file testing

在Perl中,如何测试另一个Perl程序打开的文件?我需要在第二个程序开始之前完成第一个程序。

8 个答案:

答案 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)

根据我的经验,flock可以在Windows和Linux上的本地系统上正常工作。

当你完成处理文件的时候,你也可以将第一个程序exec作为第二个程序。

答案 4 :(得分:4)

如果您在Windows上运行,则可以使用dwShareMode 0直接致电CreateFile

根据MSDN

  

如果文件或设备请求删除,读取或写入访问权限,则阻止其他进程打开文件或设备。

Win32API::File可以访问此次来电。

答案 5 :(得分:0)

要专门查看文件是否已打开或正在使用,如果您使用的是unix,则lsof命令的包装器会列出打开的文件:Unix::Lsof

答案 6 :(得分:0)

如果您使用的是Unix,也可以拨打fuser

答案 7 :(得分:0)

我可能误解了上下文,我的评论可能会限制您的可用性,但取决于您使用代码/开启的内容 - 使用串行队列来确保以可预测的顺序执行的任务可能是一个选项。您的应用程序(用Perl编写)需要显式创建和管理串行队列。有关更多详细信息,请参阅以下链接:GCD