我在Linux上使用inotify来监控目录。我的目录有50个子目录,我的目录树深20级。我能够监视目录及其所有子目录,直到这一点。我使用C ++ STL向量来保存每个目录路径及其各自的监视描述符。当我递归地添加8或10个新目录,即添加新的8-10个新级别时,我会收到有关目录树中第28或第30级别之前的任何事件的通知。如果我在28或30级内创建一个新目录,而不是我没有得到任何通知。
是否有任何机构遇到此问题。
答案 0 :(得分:0)
您应该向应用程序添加一些调试信息,以显示创建的监视数量。也许你达到了inotify手表限制的数量。
您可以使用max_user_watches
sysctl
值
$ sudo sysctl fs.inotify.max_user_watches
fs.inotify.max_user_watches = 8192
我还建议您检查程序中inotify_add_watch()
的返回值。如果达到用户对手表总数的限制,它可能会返回ENOSPC
;如果路径名是工具长度,则可能会返回ENAMETOOLONG
(可能会因为您创建深层目录树而发生)。