读书我
fswatch是一个文件更改监视器,当修改指定文件或目录的内容时,它会接收通知。 fswatch实现了几个监视器:
- 基于Apple MacOS的文件系统事件API的监视器。
- 基于kqueue的监视器,是FreeBSD 4.1中引入的通知接口(并在包括MacOS在内的大多数 *BSD系统上支持)。
- 基于Solaris内核及其导数的文件事件通知API的监视器。
- 基于Inotify的监视器,即报告文件系统更改为应用程序的Linux内核子系统。
- 基于ReadDirectoryChangesw的监视器,这是一种报告到目录的Microsoft Windows API。
- 定期指定文件系统的监视器,将文件修改时间保存在内存中,并手动计算文件系统更改(可以使用stat(2)的任何位置)。
fswatch应在任何上述API中的任何一个系统上正确构建和工作。
目录
- lib fswatch
- 特征
- 限制
- 得到fswatch
- 从来源建造
- 安装
- 文档
- 本土化
- 用法
- 贡献
- 错误报告
lib fswatch
fswatch是Lib fswatch的前端,该图书馆是C,C ++和Go Bindings的库。有关lib fswatch的更多信息,请参见此处。
特征
fswatch主要功能是:
- 支持许多特定于OS的API,例如Kevent,iNotify和fsevents。
- 递归目录监视。
- 使用包括和排除正则表达式的路径过滤。
- 可自定义的记录格式。
- 支持定期闲置事件。
限制
fswatch的局限性在很大程度上取决于正在使用的监视器:
-
仅在MACOS上可用的FSEVENTS监视器没有已知的限制,并且可以很好地缩放文件数量。
-
Solaris内核及其导数上可用的文件事件通知监视器没有已知的限制。
-
Kqueue Monitor在任何具有kqueue的BSD系统上可用,都要求为每个文件打开一个文件描述符。结果,此监视器的缩放程度很差,并且观察到的文件数量,并且一旦fswatch进程用完文件描述符,可能会开始误射。在这种情况下, fswatch将无法打开的每个文件中的标准错误中转输入一个错误。
-
由于内核2.6.13以来,在Linux上可用的Intotify监视器,如果事件的生成速度比从队列中读取的速度快,则可能会出现队列溢出。无论如何,该应用程序被保证会收到可以处理以优雅恢复的溢出通知。如果出现队列溢出, fswatch当前会引发异常。未来版本将通过发出适当的通知来处理溢出。
-
Windows显示器只能建立手表目录,而不是文件。要观看文件,必须监视其父目录,以便收到所有目录的孩子的更改活动,并在任何深度递归。可选地,可以过滤更改事件以仅包括对所需文件的更改。
-
在任何平台上可用的民意调查显示器仅依靠可用的CPU和内存来执行其任务。该监视器的性能随着观察的文件数量而线性降低。
使用建议如下:
-
在MacOS上,仅使用FSEVENTS MONITOR(这是默认行为)。
-
在Solaris及其导数上使用文件事件通知监视器。
-
在Linux上,使用Inotify Monitor(这是默认行为)。
-
如果要观察的文件数量足够小,请使用Kqueue Monitor。请注意,在某些系统上,可以通过一个过程打开的最大文件描述符数量设置为非常低的值(低至256的值并不少见),即使操作系统可能允许更大的值。在这种情况下,请检查您的操作系统文档,以提高每个过程或系统范围内的限制。
-
如果可行,请观看目录而不是文件。适当地制定事件的接收方以处理目录,可以明智地减少监视器资源消耗。
-
在Windows上,使用Windows监视器。
-
如果以上都不适用,请使用民意调查显示器。作者的经验表明, fswatch需要大约150 MB的RAM内存,以观察500.000个文件的层次结构,最小路径长度为32个字符。民意测验显示器的常见瓶颈是磁盘访问,因为stat() – 大量文件可能需要大量时间。在这种情况下,应将延迟设置为足够大的值,以减少频繁磁盘访问可能导致的性能降解。
得到fswatch
普通用户也许可以从OS或第三方的软件包管理器中fswatch 。如果您正在寻找MacOS的fswatch ,则可以使用MacPorts或Homebrew进行安装:
fswatch
# Homebrew
$ brew install fswatch \”>
# MacPorts $ port install fswatch # Homebrew $ brew install fswatch
在FreeBSD上,可以使用PKG安装fswatch :
# pkg install fswatch -mon
检查您喜欢的软件包管理器,并让我们知道那里是否缺少fswatch 。
从来源建造
希望构建fswatch的用户应该获得释放的Tarball。释放Tarball包含用户在系统上构建fswatch所需的一切,按照下面的安装部分和安装文件中详细介绍的说明。
希望修改fswatch的开发人员应获取源(从源粉块或克隆存储库中),并在其机器上安装了GNU构建系统。请阅读readme.gnu-Build-System,以获取有关如何从计算机上的来源fswatch的更多详细信息。
不建议您获得源存储库的副本,除非(i)您是开发人员,(ii)您在计算机上安装了GNU构建系统,并且(iii)您知道如何在源上引导它。
Cmake-Support非正式地提供了礼貌。
安装
有关如何配置和安装fswatch详细信息,请参见安装文件。由于fswatch构建并使用动态库,因此在某些平台中,您可能需要执行其他任务,然后才能使用fswatch :
-
确保在操作系统的动态链接器的查找路径中包括动态库的安装目录($ prefix/lib)。默认路径/usr/local/lib几乎将在每个操作系统中工作。
-
可能需要刷新链接和缓存到动态库。在GNU/Linux系统中,您可能需要运行ldconfig:
$ ldconfig
fswatch是一个C ++程序,并且需要C ++编译器符合当前使用的C ++标准的C ++编译器。
从包含1.17.1版本开始, fswatch需要C ++ 11兼式编译器。随后的版本需要C ++ 17兼式编译器。检查您的操作系统文档以获取有关如何安装C ++工具链和C ++运行时的信息。
不需要其他软件包或依赖项来配置和安装fswatch ,但是文件系统监视器使用的上述API。
文档
fswatch提供以下文档:
- Texinfo文档,包括分销。
- HTML文档。
- PDF文档。
- Wiki页面。
- 一个人页面。
fswatch官方文档以Texinfo格式提供。这是有关fswatch和唯一权威的信息来源。尤其是男人页面是一个存根,建议用户改用信息页面。
如果您使用软件包管理器安装fswatch ,并且希望将PDF手册捆绑到软件包中,请向软件包维护者发送功能请求。
本土化
fswatch是可本质的,并且在内部使用GNU GetText从其翻译中解脱出可本质的字符串。当前可用的地区是:
- 英语(EN)。
- 意大利语(it)。
- 西班牙语。
要通过本地化支持构建fswatch ,您需要在系统上安装GetText。如果配置找不到<libintl.h>或链接器找不到libintl,则通常需要手动提供其配置位置,通常使用CPPFLAGS和LDFLAGS变量。有关示例,请参见readme.macos。
如果您的系统上没有GetText,则fswatch将正确构建,但它将缺乏本地化支持,唯一可用的语言环境将是英语。
用法
fswatch接受应收到更改事件的路径列表:
$ fswatch [options] ... path-0 ... path-n
即使尚不存在任何路径,也会创建事件流。如果在启动fswatch之后创建它们,则将正确收到更改事件。根据所使用的观察者的不同,在配置延迟量经过之后,将监视新创建的路径。
fswatch的输出可以将其输送到其他程序,以便进一步处理:
fswatch -0 path | while read -d \”\” event
do
# do something with ${event}
done\”>
$ fswatch -0 path | while read -d \"\" event
do
# do something with ${event}
done
在将一组更改事件打印到标准输出时运行命令,但不需要事件详细信息,则可以使用以下命令:
$ fswatch -o path | xargs -n1 -I{} program
该行为与早期版本的fswatch (v。0.x)一致。请阅读与fswatch部分有关的兼容性问题,以获取更多信息。
默认情况下, fswatch在性能和资源消耗方面选择当前平台上可用的最佳监视器。如果用户希望指定不同的监视器,则可以使用-M选项按名称指定监视器:
$ fswatch -m kqueue_monitor path
可以使用-H选项获得可用的显示器列表。
有关更多信息,请参阅fswatch文档。
贡献
欢迎大家为fswatch做出贡献。请有关更多信息,请参阅贡献。
错误报告
错误报告可以直接发送给作者。
联系作者
可以使用FreeNode# fswatch频道在IRC上与作者联系。
执照
该软件在GPLv。3.0和Apache许可证v。2.0下进行双重许可。
版权(C)2013-2025 Enrico M. Crisostomo
该程序是免费软件;您可以根据自由软件基金会发布的GNU通用公共许可证的条款对其进行重新分配和/或修改它;版本3,或(按您的选项)任何以后的版本。
该程序的分布是希望它将有用的,但没有任何保修;即使没有对特定目的的适销性或适合性的隐含保证。有关更多详细信息,请参见GNU通用公共许可证。
您应该已经收到了GNU通用公共许可证的副本以及此计划。如果没有,请参见http://www.***gnu.org/licenses/。
