Articles of inotify

inotify错误地多次通知一个新文件

使用inotify通过在目录中添加监视来监视在目录中创build的任何新文件的目录 fd = inotify_init(); wd = inotify_add_watch(fd, "filename_with_path", IN_CLOSE_WRITE); inotify_add_watch(fd, directory_name, IN_CLOSE_WRITE); const int event_size = sizeof(struct inotify_event); const int buf_len = 1024 * (event_size + FILENAME_MAX); while(true) { char buf[buf_len]; int no_of_events, count = 0; no_of_events = read(fd, buf, buf_len); while(count < no_of_events) { struct inotify_event *event = (struct inotify_event *) &buf[count]; if (event->len) […]

用inotify处理预先存在的文件

我正在监视目录中新文件的创build/移动。 我目前正在使用一个简单的ls循环 ,我想移动到inotify 。 我有一个主要的麻烦:如何处理与预先存在的文件的初始化(在崩溃的情况下,重新启动,停止,…)? 最初,我只想监视IN_CREATE和IN_MOVED_TO,但是这不会处理预先存在的文件。 可以通过inotify本地处理吗?

Inotify可以处理大量的目录吗?

有没有人用inotify看500K – 1M的目录? 如此大量的手表性能如何? 我正在考虑创build一个跟踪某些站点上的文件更改的服务器。 服务器将用PHP或nodejs编写 。 在我开始之前,我想知道inotify是否是这个任务的正确工具。 我可以增加手表的最大数量: fs.inotify.max_user_watches=1000000 但接下来呢? 可以通过处理吗?

如何仅听取inotifywait中的特定事件?

有人可以解释为什么inotifywait仍然报告打开的文件,当我排除打开? mkdir /tmp/a inotifywait –exclude acess,attrib,close_write,close_nowrite,close,open,moved_to,moved_from,move,delete,delete_self,unmount -r -m /tmp/a/ touch /tmp/a/test /tmp/a/ OPEN test /tmp/a/ CLOSE_NOWRITE,CLOSE test 我感兴趣的是如果新文件或当前文件被修改。 我使用CentOS 7,如果这改变了任何东西。

Linux / Python:Monitor / proc / acpi文件没有轮询?

有没有办法监视/proc文件,如 /proc/acpi/battery/BAT0/state /proc/acpi/ac_adapter/ADP0/state 在非轮询的方式,类似于在正常的文件系统上的inotify? 我想在PyGTK应用程序中这样做,所以我尝试使用PyGObject的gio.FileMonitor,但没有骰子。 与gtk.main()一起使用的Python解决scheme将是理想的。

如何添加目录中的文件时使用inotify-tools来发送邮件给我?

用户有时将文件添加到Linux服务器上的目录。 我正在研究如何在文件被添加到这个目录时得到通知。 我发现了inotify-tools: https://github.com/rvoicilas/inotify-tools/wiki/ 但我不太清楚如何去使用它。 我似乎无法find适当的文件。 如果有经验的人能指导我,我将不胜感激。

可以Inotify和Select呼叫合并?

我想等待文件更改或套接字input。 这两个thinsg将会发生很less,我宁愿把它们都扔到同一个线程中,而不是为了避免一点点混乱而把它们搞乱。 由于Inotify_init似乎提供了一个文件描述符,我以为我可以将它传递给select,就像我传入一个套接字一样,select将有效地监视两者。 然而,我试图谷歌它,并没有发现任何地方发生的例子,似乎如果有可能在那里会有一个例子发生在互联网上的某处。 任何人都可以validation,如果我可以传递一个从INotify descripter到一个select的方法就像我会套接字? 或者,如果有任何其他阻塞方法,将侦听文件和套接字更新? 谢谢

看一个目录树没有inotify

我试图写一个备份工具,应该处理大量的文件夹中的大约2TB的数据。 我希望它执行文件时,他们被创build/编辑/删除操作,最好还文件移动或重命名。 我弄乱了fanotify,只是意识到它只适用于文件编辑。 如果可以的话,我反对使用inotify,因为我将不得不编辑最大的文件手表,我不想这样做。 这将有一个很大的性能影响,我认为。 我最好只是设置一个recursion地工作到它下面的所有文件的一个filewatch。 有谁有这方面的经验,谁知道什么是一个好方法? 我应该去inotify,只是采取性能打击? 或者我可以采取不同的方法?

在Linux中拦截文件打开事件

假设我们有一个可能dlopen()某个第三方库的过程。 这个库可以在用户只能写访问的文件上执行open("write_only_logfile", O_WRONLY) 。 如果这个库试图打开一个文件,我们需要有一个通知的能力,所以稍后我们可以dup()返回描述符和redirect输出。 有几个限制使得拦截变得更困难: LD_PRELOAD被禁止 – 没有办法钩open() inotify(7)不起作用,因为用户对"write_only_logfile"没有读取权限,它由pipe理员拥有 我们无法访问库源,因此无法修改它 "write_only_logfile"在库中是硬编码的,所以我们不能通过别名来执行redirect 我想知道Linux是否有一个有效的方法来帮助在这种情况下。 尤其是考虑到进程可能经常open()杂项文件的事实。 PS为了避免混淆和更好理解 – 这是一个常规的Android应用程序加载JVM。 如果应用程序挂起(所谓的ANR) – 系统发送SIGQUIT 。 信号通过open() s /data/anr/traces.txt专用线程接收, /data/anr/traces.txt其写入JVM状态。 这些数据对于debugging非常有用。 但是,由于安全原因,应用程序无法直接读取该文件(所有应用程序都将其写入,因此可能会有些敏感)。 无论如何,我相信拦截我的stream程写入内容是绝对公平的。 PSS在最坏的情况下,可以findJVM库映像( libart.so )并手动open()跳转槽。 但听起来不太好。

Inotify不能用于etc / passwd

我正在尝试在/ etc目录中设置passwd文件的列表程序,并且仅在第一次更改密码时才会收到通知。 fd = inotify_init(); wd = inotify_add_watch (fd, "/etc/passwd", IN_MODIFY); while(1) { read (fd, buff, BUFF_SIZE); struct inotify_event *event = ( struct inotify_event * ) &buff[ i ]; printf("Event Len – %d wd %d \n", event->len, event->wd); } 为什么它第一次工作,而不是晚?我每次更改密码时看到时间戳更改。 相同的代码工作正常的其他文件。