0

一个文件从 machine1/dir1 复制到 machine2/dir2。我在 dir2 上为创建的任何新文件添加了一个 inotify 监视。现在,如果文件很大,可能需要几秒钟才能完全在新机器上。如果我没记错的话,inotify 会在检测到事件后立即通知应用程序。那么如果必须检查文件状态,应该怎么做呢?

4

3 回答 3

3

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

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

于 2012-08-27T07:36:24.827 回答
2

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

于 2012-08-27T07:30:33.197 回答
1

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

上述两个答案是否有意义取决于我们如何做到这一点。

于 2012-08-29T14:37:10.247 回答