我正在使用tail-f(在Linux上)并试图弄清楚我应该如何使用-s参数来设置轮询间隔。一位同事告诉我-s0会导致tail使用inotify而不是轮询,但我在tail的文档中找不到它。我跟踪的二进制文件不断变化-这是否表明我应该使用-s0或几分之一秒(如-s0.1)? 最佳答案 不,tail-f并不总是使用inotify。inotify并不总是可用。即使您的内核支持它,也只有有限数量的句柄可用于使用inotify监视文件,并且它们可能在其他地方使用。此外,如果传递给tail的名称列表中的任何文件不在本地文件系统上,将无条件地使用轮
在Linux中读取文件系统事件,我们大多数人使用Inotify,它确实是一个好工具。但它有其局限性。我必须跟踪我必须监视的所有目录,并为每个目录获取一个inotify描述符。假设我想监控我的整个系统,它有大约1000万个目录。为inotifyAPI本身列出和排队它们需要几个小时。它也会吃掉很多内存。而且我当然不能观看超过/etc/syscntl.conf或/proc/sys/fs/inotify/max_user_watches中max_user_watches指定的目录。但我们知道每个文件系统事件都由内核监控,我们使用inotifyAPI来注册某个目录修改。但是我如何在没有API的情
在Linux中读取文件系统事件,我们大多数人使用Inotify,它确实是一个好工具。但它有其局限性。我必须跟踪我必须监视的所有目录,并为每个目录获取一个inotify描述符。假设我想监控我的整个系统,它有大约1000万个目录。为inotifyAPI本身列出和排队它们需要几个小时。它也会吃掉很多内存。而且我当然不能观看超过/etc/syscntl.conf或/proc/sys/fs/inotify/max_user_watches中max_user_watches指定的目录。但我们知道每个文件系统事件都由内核监控,我们使用inotifyAPI来注册某个目录修改。但是我如何在没有API的情
我在Linux系统上有一个本地媒体文件目录,我使用s3sync脚本将其与AmazonS3帐户同步。目前,当我知道媒体文件已被修改时,我正在手动运行s3sync脚本。如何在修改文件时自动运行脚本?我正在考虑创建一个cron作业来每隔几分钟运行一次脚本,但这似乎是一个过多的处理量,因为即使没有任何变化,脚本仍然必须扫描整个目录结构,这是相当大。我也考虑过incron/inotify,它允许在特定文件或目录更改时运行命令,但这些工具似乎并不自动支持监视对整个嵌套目录的更改。如果我错了请纠正我,但似乎incron/inotify只能监视已明确告知要监视的文件。例如如果我想监控目录内任何级别的所
我在Linux系统上有一个本地媒体文件目录,我使用s3sync脚本将其与AmazonS3帐户同步。目前,当我知道媒体文件已被修改时,我正在手动运行s3sync脚本。如何在修改文件时自动运行脚本?我正在考虑创建一个cron作业来每隔几分钟运行一次脚本,但这似乎是一个过多的处理量,因为即使没有任何变化,脚本仍然必须扫描整个目录结构,这是相当大。我也考虑过incron/inotify,它允许在特定文件或目录更改时运行命令,但这些工具似乎并不自动支持监视对整个嵌套目录的更改。如果我错了请纠正我,但似乎incron/inotify只能监视已明确告知要监视的文件。例如如果我想监控目录内任何级别的所
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
我有一个名为“Datas”的文件夹。该文件夹有一个名为“收件箱”的子文件夹,其中有多个“.txt”文件。这个“Datas”文件夹可以修改,最后会有多个子文件夹,里面有“Inbox”子文件夹和“.txt”文件。我需要监控“数据”文件夹和“收件箱”文件夹中的“.txt”文件。我该怎么做?INotify仅监控文件夹并在创建子文件夹时弹出事件。如何在创建“.txt”文件时弹出事件(在哪个文件夹中)?我需要C或C++代码,但我被卡住了。我不知道如何解决这个问题。 最佳答案 来自inotify联机帮助页:IN_CREATEFile/direct