Answers:
您不能让内核仅通知您对特定路径的更改。原因有些微妙:
在Linux中,文件对象的存在独立于其可能具有的任何名称。文件的名称实际上是其包含目录的属性,并且单个文件可以由多个名称调用(请参阅硬链接)。
内核必须具有将inotify对象附加到其中的内容;由于路径名不是真正的文件系统对象,因此无法将对象附加到路径名;您必须附加到父目录或路径描述的文件。但是您无法附加到文件,因为您正在查看是否已创建具有给定名称的文件,而不是更改为给定文件。
从理论上讲,内核可以实现一个API,该API允许您在将监视添加到目录时为给定的路径名选择事件,与允许您选择事件类型的方式大体相同。这会使API膨胀,并且内核最终将处理与用户空间中相同的数据并进行相同的字符串比较。
将手表放在非常活跃的目录上是否会对性能产生明显影响?我不确定你的意思是多么活跃。每秒几十个文件,几百万个,几百万个?
无论如何,我都会避免access
:它总是会竞争的。可以在调用之间创建和删除文件access
,并且access
在非常紧密的循环中调用会很慢,这inotify
是设计用来解决的问题。
inotify
,以及性能是否是实际问题。
access
有F_OK
,看它是否存在呢。