在Linux中读取文件系统事件,我们大多数人使用Inotify,它确实是一个好工具。但它有其局限性。我必须跟踪我必须监视的所有目录,并为每个目录获取一个inotify描述符。假设我想监控我的整个系统,它有大约1000万个目录。为inotifyAPI本身列出和排队它们需要几个小时。它也会吃掉很多内存。而且我当然不能观看超过/etc/syscntl.conf或/proc/sys/fs/inotify/max_user_watches中max_user_watches指定的目录。但我们知道每个文件系统事件都由内核监控,我们使用inotifyAPI来注册某个目录修改。但是我如何在没有API的情
inotify_event结构如下所示:structinotify_event{intwd;/*Watchdescriptor*/uint32_tmask;/*Maskofevents*/uint32_tcookie;/*Uniquecookieassociatingrelatedevents(forrename(2))*/uint32_tlen;/*Sizeofnamefield*/charname[];/*Optionalnull-terminatedname*/};名称部分只存储文件名(不是文件的路径)。我们如何从inotify_event结构中获取完全限定的路径,或者我是否必须
inotify_event结构如下所示:structinotify_event{intwd;/*Watchdescriptor*/uint32_tmask;/*Maskofevents*/uint32_tcookie;/*Uniquecookieassociatingrelatedevents(forrename(2))*/uint32_tlen;/*Sizeofnamefield*/charname[];/*Optionalnull-terminatedname*/};名称部分只存储文件名(不是文件的路径)。我们如何从inotify_event结构中获取完全限定的路径,或者我是否必须
我正在使用inotify来监听对文件的修改。当我测试文件修改时,程序运行正常。#echo"test">/tftpboot/.TESTOutput:Read16dataIN_MODIFY但是当我执行tftpput时,会生成两个事件:tftp>put.TESTSent6bytesin0.1secondstftp>Output:Read16dataIN_MODIFYRead16dataIN_MODIFY知道如何避免重复通知吗?代码如下:#include#include#include#include#include#includeusingnamespacestd;intmain(intar
我正在使用inotify来监听对文件的修改。当我测试文件修改时,程序运行正常。#echo"test">/tftpboot/.TESTOutput:Read16dataIN_MODIFY但是当我执行tftpput时,会生成两个事件:tftp>put.TESTSent6bytesin0.1secondstftp>Output:Read16dataIN_MODIFYRead16dataIN_MODIFY知道如何避免重复通知吗?代码如下:#include#include#include#include#include#includeusingnamespacestd;intmain(intar
我正在使用LinuxInotify来检测程序上的FS事件。当设备挂载到监控目录时如何通知我? 最佳答案 我不认为你可以用inotify来做到这一点。这是方法:阅读ueventsfromkernel通过Netlink套接字并过滤掉"ACTION"不是"mount"的那些。Readandparse"/proc/mounts"当您收到带有"mount"操作的事件时。使用刚刚挂载的设备查找挂载点的记录,如果它不是您正在查看的目录,则将其过滤掉。 关于c-我如何检测目录何时使用inotify挂载?
我正在使用LinuxInotify来检测程序上的FS事件。当设备挂载到监控目录时如何通知我? 最佳答案 我不认为你可以用inotify来做到这一点。这是方法:阅读ueventsfromkernel通过Netlink套接字并过滤掉"ACTION"不是"mount"的那些。Readandparse"/proc/mounts"当您收到带有"mount"操作的事件时。使用刚刚挂载的设备查找挂载点的记录,如果它不是您正在查看的目录,则将其过滤掉。 关于c-我如何检测目录何时使用inotify挂载?
所以在alex回答之后,这是我的步骤:创建shell代码root@ip[/]#touchmylog.shroot@ip[/]#nanomylog.sh复制mylog.sh中的代码#!/bin/bashecho"File$1created.">>/mylog.log许可root@ip[/]#chmod+xmylog.sh创建日志文件root@ip[/]#touchmylog.log打开icron表incrontab-e放入新命令/test/IN_CREATEmylog.sh$@$#重新加载incron-创建一个新文件-检查日志文件root@ip[/]#incrontab--reloadr
所以在alex回答之后,这是我的步骤:创建shell代码root@ip[/]#touchmylog.shroot@ip[/]#nanomylog.sh复制mylog.sh中的代码#!/bin/bashecho"File$1created.">>/mylog.log许可root@ip[/]#chmod+xmylog.sh创建日志文件root@ip[/]#touchmylog.log打开icron表incrontab-e放入新命令/test/IN_CREATEmylog.sh$@$#重新加载incron-创建一个新文件-检查日志文件root@ip[/]#incrontab--reloadr
很抱歉,我无法发布代码来重现此内容。我的问题恰恰是我不知道如何去调试这个问题。我正在使用ptrace和PTRACE_O_TRACEFORK|PTRACE_O_TRACEEXEC|PTRACE_O_TRACEVFORK|PTRACE_O_TRACEVFORKDONE|PTRACE_O_TRACECLONE跟踪进程及其子进程(以及子进程的子进程)。该机制很像strace,但用途略有不同,因为我只是跟踪被读取或修改的文件。我的代码(用C语言编写)在x86-64架构的Debianwheezy和Debianjessie上运行良好(在i386上测试较少)。当我尝试在UbuntuPrecisex86