gpt4 book ai didi

c++ - inotify 未注册所有事件

转载 作者:行者123 更新时间:2023-12-04 19:30:06 26 4
gpt4 key购买 nike

我正在尝试使用 inotify 递归地查看目录,这意味着,每当在此目录或其中一个子目录中创建目录或文件时,我都希望收到通知。程序开始时主目录为空。
我基本上是从这里复制代码进行测试:https://gist.github.com/pkrnjevic/6016356
现在,当我运行应用程序并开始填充监视目录时,inotify 只注册直接子目录和第一个子目录的创建,子目录或其他子目录中的任何文件都不会注册。
我将尝试说明:

/home/user/watched_directory: echo "hello" > file.txt               // registered by inotify
/home/user/watched_directory: mkdir subdir // registered by inotify
/home/user/watched_directory: mkdir subdir/subsubdir // registered by inotify
/home/user/watched_directory: echo "hello again" > subdir/file2.txt // NOT registered
/home/user/watched_directory: mkdir subdir/subsubdir2 // NOT registered
据我了解inotify,任何在创建观察者时指定的事件都应该注册或者我错过了什么?
我在 Windows 主机上的 docker 容器内运行 Ubuntu 20.04。
任何帮助,将不胜感激。

最佳答案

好吧,为了响应创建节点事件,您需要检查它是否是一个目录,然后将该目录添加到受监控节点列表中......第一次递归导航目录树时,添加所有目录和子目录到受监控节点列表....您将收到事件。正如您从手册页中看到的,您会收到有关创建到新 inode 子节点的链接的信息。但是你只接收注册节点的事件,而不是间接连接的节点......想象一台有数百个用户在 session 中的机器,每个人都在监控他们的主目录并拥有千兆字节的文件......内核会爆炸。
如果您接受提示...不要那样做。如果您正在实现图形桌面工具来查看桌面资源管理器或文件管理器之类的文件......然后只通知正在查看的目录......而不是其他......否则您将拆除您的系统。

关于c++ - inotify 未注册所有事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67474689/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com