我有一个Clipper系统将csv文件写入Windows目录。我在Linux服务器上运行Perl脚本,该服务器正在读取该Windows目录的安装并将文件导入数据库。
现在我们正在使用标志文件来指示何时不再写入csv; csv完成后写入标志文件。我真的只是从csv本身得到我需要的东西,但我似乎无法找到一种方法来判断文件何时打开并被写入。
lsof
似乎无法满足我的需求。我已经尝试使用flock
并使用独占锁打开文件,认为如果文件被修改可能会引发错误,但事实并非如此。
有什么想法吗?
答案 0 :(得分:0)
根据linux的flock手册:
flock()不会通过NFS锁定文件。 改为使用fcntl(2):这确实有效 在NFS上,给出了足够的最新信息 Linux版本和服务器 它支持锁定。
您是否尝试过使用fcntl()?谷歌搜索我发现有一些examples人使用fcntl与CIFS。
答案 1 :(得分:0)
由于您正在安装到Windows,因此可能无效,但inotify可能有所帮助。
答案 2 :(得分:0)
如果inotify不起作用,请使用穷人的轮询:如果修改时间超过两秒,则文件写完。
答案 3 :(得分:0)
像Linux::Inotify2或File::Monitor之类的东西可以用来监控文件。