inotify 可以用来监视要创建的特定文件而不监视整个目录吗?

inotify 可以用来监视要创建的特定文件而不监视整个目录吗?

我希望在创建特定文件名时收到通知。我正在看inotify。该IN_CREATE标志可用于监视目录中的任何更改,但我不想监视整个目录,因为除了我感兴趣的文件之外,该目录中可能还有大量活动。可以这样做吗?

答案1

您不能让内核只通知您某个路径的更改。原因有点微妙:

  • 在 Linux 中,文件对象的存在与其可能具有的任何名称无关。文件的名称实际上是其包含目录的属性,并且单个文件可以由多个名称调用(请参阅硬链接)。

  • 内核必须有一些东西可以附加 inotify 对象;它不能将对象附加到路径名,因为路径名不是真正的文件系统对象;您必须附加到父目录或路径描述的文件。但您无法附加到该文件,因为您正在观察是否创建了具有给定名称的文件,而不是对给定文件的更改。

理论上,内核可以实现一个 API,允许您在将监视添加到目录时为给定路径名选择事件,就像它允许您选择事件类型一样。这会使 API 变得臃肿,并且内核最终会处理相同的数据并进行与用户空间中相同的字符串比较。

将手表放置在非常活跃的目录上是否会对性能产生明显影响?我不确定你的意思是多活跃;每秒数十个文件、数百个、数百万个?

无论如何,我会避免access:它总是会很混乱。可以在调用之间创建和删除文件access,并且access在非常紧密的循环中调用会很慢,而这正是inotify旨在解决的问题。

相关内容