iowaitnotify close_wait 是否保证文件完全写入?

iowaitnotify close_wait 是否保证文件完全写入?

请澄清close_writeionotifywait 事件是否能保证文件已完全写入。

这种情况是文件传输程序将文件X发送到远程服务器Z,并且需要通过监视Z上的X,当文件完全传输时移动X。我们不知道传输何时发生,因此需要监视。

bash 脚本 inotifywait 等待文件完全写入后再继续表示close_write告诉文件已完全写入。

检查这两个文件是否是的最好方法是什么完全写完

正如 pacholik close_write 所指出的,仅事件选项就足够了:

inotifywait -m -e close_write $1 | while read line

然而,手册页说并不一定意味着文件被写入

inotifywatch(1) - Linux 手册页

关闭写入
监视的文件或监视目录中的文件在以可写模式打开后被关闭。这确实不一定意味着文件已写入

答案1

最后一段强调了这样一个事实:该close_write事件仅指示文件描述符已关闭,并且它是以可写模式打开的;它没有说明打开事件和关闭事件之间发生的任何事情。因此一个过程在做

fd = open("/path/to/foo", O_RDWR);
close(fd);

会触发一个close_write事件。

本质上,如果您想知道文件已修改以及修改已完成,则必须监视modifyclose_write(或close)事件。

在您的场景中,close_write这就足够了:一旦文件关闭,任何后续的读取都将产生写入该文件的所有数据,并且修改它的原始进程不能再这样做(无需重新打开它)。这意味着所有数据都在磁盘上,它可能仍在缓存中;但读取它的进程会看到所有数据。

相关内容