如何使用Perl测试csv文件当前是否已打开并被写入文件,而不是文件句柄?

时间:2010-05-25 15:39:35

标签: perl

我有一个Clipper系统将csv文件写入Windows目录。我在Linux服务器上运行Perl脚本,该服务器正在读取该Windows目录的安装并将文件导入数据库。

现在我们正在使用标志文件来指示何时不再写入csv; csv完成后写入标志文件。我真的只是从csv本身得到我需要的东西,但我似乎无法找到一种方法来判断文件何时打开并被写入。

lsof似乎无法满足我的需求。我已经尝试使用flock并使用独占锁打开文件,认为如果文件被修改可能会引发错误,但事实并非如此。

有什么想法吗?

4 个答案:

答案 0 :(得分:0)

根据linux的flock手册:

  

flock()不会通过NFS锁定文件。   改为使用fcntl(2):这确实有效   在NFS上,给出了足够的最新信息   Linux版本和服务器   它支持锁定。

您是否尝试过使用fcntl()?谷歌搜索我发现有一些examples人使用fcntl与CIFS。

答案 1 :(得分:0)

由于您正在安装到Windows,因此可能无效,但inotify可能有所帮助。

答案 2 :(得分:0)

如果inotify不起作用,请使用穷人的轮询:如果修改时间超过两秒,则文件写完。

答案 3 :(得分:0)

Linux::Inotify2File::Monitor之类的东西可以用来监控文件。