inotify:如何在传输完成后通知目录中的新文件?

时间:2012-08-27 07:28:19

标签: c++ linux inotify

将文件从machine1 / dir1复制到machine2 / dir2。我在dir2上添加了一个inotify手表,用于创建任何新文件。现在,如果文件很大,可能需要几秒钟才能完全使用新机器。如果我没错,inotify会在检测到事件后立即通知应用程序。因此,如果必须检查文件状态,应该如何进行?

3 个答案:

答案 0 :(得分:3)

使用临时文件名(或其他目录)保存下载的文件,并在文件成功移动时将其重命名为预期的文件名。

例如,Nginx使用此方法来存储缓存数据 首先将缓存数据写入临时文件,然后将其移动到缓存目录中的最终位置。执行廉价和原子重命名系统调用而不是完整文件副本因此最好在两个位置使用相同的文件系统

答案 1 :(得分:2)

没有办法回答这个问题,因为它取决于应用程序环境和要求。可能会看到该文件未被修改60秒。可能需要每隔几秒检查一次。这取决于。

答案 2 :(得分:1)

使用IN_CLOSE_WRITE只有从一台机器到另一台机器的scp才能工作。否则,它取决于文件从一台机器上传到另一台机器的方式。如果它一次打开和关闭,IN_CLOSE_WRITE就是这样做的方法。

上述答案都有意义,具体取决于我们的工作方式。