我想在创建特定文件名时收到通知。我在看inotify。该IN_CREATE标志可用于监视目录中的任何更改,但我不想监视整个目录,因为除了我感兴趣的文件之外,该目录中可能还有大量活动。 可以这样做吗?
小智 7
您不能让内核只通知您某个路径的更改。原因有点微妙:
在 Linux 中,文件对象独立于它可能具有的任何名称而存在。文件的名称实际上是其包含目录的属性,单个文件可能会被多个名称调用(请参阅硬链接)。
内核必须有一些东西可以附加 inotify 对象;它不能将对象附加到路径名,因为路径名不是真正的文件系统对象;您必须附加到父目录或路径描述的文件。但是您不能附加到该文件,因为您正在查看是否创建了具有给定名称的文件,而不是对给定文件的更改。
理论上,内核可以实现一个 API,允许您在将监视添加到目录时为给定的路径名选择事件,这与它允许您选择事件类型的方式非常相似。这会使 API 膨胀,并且内核最终会处理相同的数据并进行与在用户空间中进行的相同的字符串比较。
将手表放在非常活跃的目录上是否会显着影响性能?我不确定你的意思是多么活跃;每秒数十个、数百个、数百万个文件?
在任何情况下,我都会避免access:它总是会很快。可以在调用 之间创建和删除文件access,并且access在非常紧密的循环中调用会很慢,而这inotify正是旨在解决的问题。
| 归档时间: |
|
| 查看次数: |
6284 次 |
| 最近记录: |