我正在使用inotify事件(恰好发生在Python中,调用libc)来监视文件中的更改。
对于a期间的某些文件git clone,我看到了一些奇怪的事情:我看到一个IN_CREATE事件,并且通过ls它看到该文件包含内容,但是,我从未看到IN_MODIFY或IN_CLOSE_WRITE。因为我要IN_CLOSE_WRITE对文件做出响应,这导致了我的问题:具体来说,是启动文件内容的上载。
行为异常的文件位于.git/objects/pack目录中,并以.pack或结尾.idx。git创建的其他文件具有更规则的IN_CREATE-> IN_MODIFY-> IN_CLOSE_WRITE链(我不在监视IN_OPEN事件)。
这是在MacOS上的docker内部,但是我已经看到在远程系统上的Linux上的docker上有相同的证据,因此我怀疑MacOS方面是不相关的。如果正在观看并且git clone在同一个 Docker容器中,我会看到这个。
我的问题:
为什么这些文件上缺少这些事件?
该怎么办?具体来说,我该如何回应对这些文件的写入完成?注意:理想情况下,我想在“完成”书写时做出响应,以避免不必要地/(不正确地)上传“未完成”的书写。
编辑:阅读https://developer.ibm.com/tutorials/l-inotify/看来我所看到的与
- 一个单独的临时文件,其名称如
tmp_pack_hBV4Alz,正在创建,修改和关闭; - 将以最终名称创建到该文件的硬链接
.pack; - 原始
tmp_pack_hBV4Alz名称被删除。
我认为我的问题是尝试使用inotify作为上载文件的触发器,然后简化为注意到该.pack文件是与另一个文件的硬链接,并且在这种情况下上载?