如何使用inotify_init,inotify_add_watch,inotify_rm_watch,read编写监控程序

现代C++封装inotify与select实现高效文件监控方案 文件系统监控是Linux开发中的常见需求,传统轮询方案实时性差且资源消耗大。inotify作为内核提供的事件驱动机制,能够高效监控文件变化并即时通知应用。结合I/O多路复用技术如select,可以实现单线程同时监控多个文件描述符,构建非阻塞的异步事件处理模型。这种方案在现代C++工程实践中,通过RAII机制和类型安全封装,将底层系统调用转化为安全易用的高级抽象,广泛应用于日志分析、配置热重载等场景。本文深入探讨了如何利用select与inotify实现一套符合现代C++设计哲学的文件监控组件,涵盖核心封装、 阅读详情
   http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201011209823241/

2010-12-20 10:00:29|  分类: Linux系统编程 |  标签: |字号大中小 订阅

inotify是什么?用它能干些什么?

         通俗点说它是一个内核用于通知用户空间程序文件系统变化的系统,并且它是powerful yet simple的。

 

inotify的用户接口原型主要有以下3个:
#include  <sys/inotify.h>

初始化:int inotify_init(void);

               int    fd  =  inotify_init();
添加监视对象:int inotify_add_watch(int fd, const char *path, uint32_t mask);

             int   wd   = inotify_add_watch(fd,path,mask);

             fd是inotify_init()的返回值。

             const  char *path是要监控的文件(目录)的路径。

             uint32_t   mask是:

             如何使用inotify_init,inotify_add_watch,inotify_rm_watch编写程序 - xychenbaihu@yeah - 无影的博客

             还有非常多的事件可以使用。使用man   inotify可以查看所有可以监听的事件。

             mask是上面这些事件的或。例如IN_ACCESS|IN_MODIFY。

             返回值:wd表示对那个文件进行监控。
删除监视对象:int inotify_rm_watch(int fd, uint32_t wd);

             参数fd是inotify_init的返回值。

                    wd是inotify_add_watch的返回值。

             inotify_rm_watch删除对wd所指向的文件的监控。

读取监控发生的事件:

             size_t len = read(fd, buf, BUF_LEN);

             读取事件数据,buf应是一个指向inotify_event结构数组的指针。不过要注意的是inotify_event的name成员长度是可变的,这个问题后面再解释。

             注意:其中buf是一个指向struct  inotify_event数组的指针。

                      由于struct   inotify_event长度是可变的,因此在读取inotify_event数组内容的时候需要动态计算一下时间数据的偏移量。index += sizeof(struct inotify_event)+event->len,len即name成员的长度。

        

其实还是没有讲的很清楚,不过看了下面的例子,一定非常清楚:

#include <stdio.h>   
#include <unistd.h>   
#include <sys/select.h>   
#include <errno.h>   
#include <sys/inotify.h>   
  
static void   _inotify_event_handler(struct inotify_event *event)      //从buf中取出一个事件。  
{   
         printf("event->mask: 0x%08x\n", event->mask);   
         printf("event->name: %s\n", event->name);   
}   
  
int  main(int argc, char **argv)   
{   
  if (argc != 2) {   
    printf("Usage: %s <file/dir>\n", argv[0]);   
    return -1;   
  }   
  
  unsigned char buf[1024] = {0};   
  struct inotify_event *event = NULL;              


  int fd = inotify_init();                 //初始化
  int wd = inotify_add_watch(fd, argv[1], IN_ALL_EVENTS);                  //监控指定文件的ALL_EVENTS。
  
  for (;;) 

  {   
       fd_set fds;   
       FD_ZERO(&fds);                
       FD_SET(fd, &fds);   


       if (select(fd + 1, &fds, NULL, NULL, NULL) > 0)                //监控fd的事件。当有事件发生时,返回值>0

       {   
           int len, index = 0;   
           while (((len = read(fd, &buf, sizeof(buf))) < 0) && (errno == EINTR));       //没有读取到事件。
           while (index < len) 

           {   
                  event = (struct inotify_event *)(buf + index);                      
                  _inotify_event_handler(event);                                             //获取事件。
                  index += sizeof(struct inotify_event) + event->len;             //移动index指向下一个事件。
           }   
       }   
  }   
  
  inotify_rm_watch(fd, wd);              //删除对指定文件的监控。
  
  return 0;   
}  

             

            


在线机器学习(OML-AD)应对时序数据概念漂移的异常检测实战 时序数据异常检测是监控系统健康、识别业务风险的核心技术。其基本原理是通过预测模型学习数据的正常模式,并将预测误差作为异常判定的依据。然而,当数据背后的统计规律随时间发生变化,即发生概念漂移时,传统的静态模型会失效,导致误报和漏报激增。在线机器学习技术通过增量学习,使模型能够随每个新数据点实时微调,为预测式异常检测提供了动态适应能力,从而在数据流持续演化的场景下保持检测的鲁棒性。这种将预测与检测无缝衔接的OML-AD框架,尤其适用于工业监控、金融风控等对实时性与资源效率要求高的领域,有效解决了概念漂移这一核心 阅读详情

相关推荐

【讯飞星火大模型AI】SpringBoot整合星火API:从零构建智能数据分析助手

本文详细介绍了如何使用SpringBoot框架整合讯飞星火大模型API,从零构建一个智能数据分析助手。通过清晰的步骤,指导开发者完成API密钥申请、项目搭建、SDK集成与核心代码编写,实现用户通过自然语言指令和CSV数据,即可自动获得ECharts图表代码与专业数据分析结论,极大降低数据分析与可视化的门槛。

neovim7hacker的博客 275

【C++】Linux inotify 文件监控机制介绍及使用

使用 Linux 进行文件监控。Linux 提供的 是一种异步文件监控机制,可以用来监控文件系统的事件,包括访问、读写、权限、删除、移动等事件。 既可以监控单个文件,也可以监控整个目录,当监控的对象是一个目录的时候,目录本身和目录下的文件/文件夹都是被监控的对象。但是不能递归监控子目录,如果想要监控子目录下的文件,需要自己通过递归的方法将所有子目录都添加到监控中。此种机制出现的目的是当内核空间发生某种事件之后,可以立即通知到用户空间,方便用户对此做出相应的操作。 是一个内核用于通知用户空间程序文件系统变

unonoi的博客 9723

从模组到集装箱:手把手拆解一个储能BMS的软硬件架构设计与通信组网

本文深入解析储能BMS的软硬件架构设计与通信组网,从电芯采样到系统集成的全链条技术实现。详细介绍了三级硬件架构(AFE、CMU、BMU)的设计要点,以及软件分层实现中的驱动层、应用层核心算法和通信协议栈。通过实战案例分享CAN网络搭建、调试工具链和系统验证测试经验,为储能系统开发提供实用指导。

weixin_30752699的博客 462

Linux inotify功能及实现原理

1. inotify主要功能 它是一个内核用于通知用户空间程序文件系统变化的机制。 众所周知,Linux 桌面系统与 MAC 或 Windows 相比有许多不如人意的地方,为了改善这种状况,开源社区提出用户态需要内核提供一些机制,以便用户态能够及时地得知内核或底层硬件设备发生了什么,从而能够更好地管理设备,给用户提供更好的服务,如 hotplug、...

weixin_33918357的博客 715

第 13 章:Spring AI Alibaba MCP 与 Nacos3 — 企业级MCP服务

理解Spring AI Alibaba 框架下的MCP服务与Nacos注册中心整合的必要性,学会Spring AI Alibaba-基于Nacos的MCP实现方法

paopao_wu的专栏 788

注意力机制模块:二次创新:CBAM 与 ECA 融合形成 CECA 模块,参数量减少 40%

文章摘要: 本文提出一种轻量化注意力模块CECA,通过融合CBAM和ECA的优势解决模型部署中的精度与速度矛盾。CBAM虽具备通道和空间双重注意力,但参数量大;ECA轻量但缺乏空间注意力。CECA采用ECA的一维卷积替换CBAM的通道注意力部分,保留其空间注意力模块,在保持双注意力能力的同时减少40%参数量。实验表明该方案在边缘设备部署中能维持精度并提升推理速度,特别适用于YOLO等目标检测模型的轻量化改进。文章详细拆解了架构设计、代码实现及参数量优化原理,为算法工程师和嵌入式开发者提供了实用解决方案。

ZXSXJ的博客 236

Unix/Linux编程:监控文件事件

某些应用程序需要对文件或目录进行监控,已侦测是否发生了特定事件。比如,当把文件加入或者移除一目录树时,图形化文件管理器应该能判断此目录是否在当前显示之列;守护进程可能想要监控自己的配置文件,以了解其是否被修改 自内核2.6.13起,Linux开始提供 inotify 机制,以允许应用程序监控文件事件 inotify 机制所取代的是 dnotify,后者一来较为陈旧,二来仅具备前者的部分功能 概述 使用inotify API由如下几个关键步骤 应用程序使用 inotify_init()来创建一 inot.

OceanStar的博客 1094

8-阿里云服务器 ECS配置R及Studio Server

步骤概览:(首先要明确自己的系统然后进行安装)

hx2024的博客 1570

Linux监听器 -- inotify

inotify作为Linux系统的一个监听器,能够监听文件或者目录的变化。

c-coder的博客 1867

DeepLabv3+改进专栏

🔥【DeepLabv3+改进专栏!探索语义分割新高度】🌟 你是否在为图像分割的精度与效率发愁?📢 本专栏重磅推出:✅ 独家改进策略:融合注意力机制、轻量化设计与多尺度优化✅ 即插即用模块:ASPP+升级、解码器。

AIcurator的博客 2575

无人飞行器和车辆的协同配送物资问题——附带MATLAB代码

通过建立城市地图、生成物资点和配送任务、路径规划、协同调度以及仿真和评估等步骤,可以有效地解决物资配送的优化问题。通过建立城市地图、生成物资点和配送任务、路径规划、协同调度以及仿真和评估等步骤,可以有效地解决物资配送的优化问题。我们的目标是最小化物资配送的总时间,同时确保每个物资点都被正确配送的无人飞行器或车辆所访问。我们的目标是最小化物资配送的总时间,同时确保每个物资点都被正确配送的无人飞行器或车辆所访问。我们首先需要建立一个城市地图,包括物资点、无人飞行器的起始点和车辆的起始点。

CyberJolt的博客 950

Linux-c inotify监控目录和文件使用

在Linux相关项目中,遇到过这样子的需求,要监控某个目录下文件的改动,比如新建,删除等,这时候就派上用场了。

张氏小毛驴的博客 879

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

(转)使用inotify、inotify_add_watch、inotify_rm_watch、read编写监控程序

转自:http://blog.youkuaiyun.com/myarrow/article/details/7096460 inotify是什么 inotify是文件系统变化通知机制,在监听到文件系统变化后,会向相应的应用程序发送事件 典型的应用场景是文件管理器,理想情况下是用户修改了文件内容后立刻显示出文件最新的内容,而刷新后才显示,如果没有inotify机制,一般会采用轮询的方式实现这种功能,这不能...

weixin_33963594的博客 281

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

inotify-文件或目录监控

从 Linux 2.6.13 内核开始,Linux 就推出了 inotify,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性。 参考文章: http://blog.jiunile.com/php%E4%BD%BF%E7%94%A8inotify%E5%AE%9E%E7%8E%B0%E9%98%9F%E5%88%97

beyond__devil的博客 2944

选一篇PDF右键翻译:Zotero PDF2zh 本地翻译服务的落地手册

在 Zotero 里选中一篇英文 PDF,右键点「翻译PDF」,几分钟后同一个条目下多出一份带中文的对照文档——这就是 Zotero PDF2zh 做的事:一个跑在本机 8890 端口的 Python 翻译服务,外加一个 Zotero 插件,把"环境安装、翻译引擎、API 对接"都收在服务里,你的操作只剩选中、右键、阅读。本文按"部署 → 翻译 → 调参 → 排障"的顺序走完整个落地路径。 ##

gitblog_00433的博客 814

inotify结合select监控目录下文件变动

#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <sys/types.h> #include <sys/inotify.h> #include <string.h> #include <sys/select.h> #define EVENT_SIZE ( sizeof (struct inotify_event) ) #define .

zhangge3663的博客 908

Linux命令及使用方法new

本文总结了Linux系统管理与开发环境配置的实用技巧,涵盖了常用命令、工具配置和问题解决方法。主要内容包括:Linux基础操作(文件/目录管理、vim编辑器、权限控制);系统资源监控(du/df命令);文本处理(grep/cut/awk);Ubuntu系统问题排查;开发工具链配置(Anaconda/Virtualenvwrapper/Jupyter);终端增强(cmder/Screen);IDE使用(VSCode/Visual Studio);非root权限软件安装;Windows冷门知识;LaTeX语法;

zhjadsf的博客 3217

inotify手册

如果先前已将pathname加入fd的监控列表,则会修改现有pathname监控项的掩码,并返回其监控描述符。会在列表中创建一个新的监控项,并返回一个新的、非负的监控描述符,用来在后续操作中指代此监控项。之所以这么做,是因为很多应用程序都并不关注同一时间的反复出现,而其丢弃多余的事件能降低内核维护事件队列所需的内存总量。会从文件描述符fd所指代的 inotify实例中,删除由wd所定义的监控项。,会返回其所指代的inotify实例中的当前可读字节数。既可以追加新的监控项,也可以修改现有监控项。

随手写下笔记和感悟 433

Linux inotify功能及原理(inotify_init、inotify_add_watch、inotify_rm_watch、read)

一、inotify 主要功能它是一个内核用于通知用户空间程序文件系统变化的机制。开源社区提出用户态需要内核提供一些机制,以便用户态能够及时地得知内核或底层硬件设备发生了什么,从而能够更好地管理设备,给用户提供更好的服务,如 hotplug、udev 和 inotify 就是这种需求催生的。inotify 是文件系统变化通知机制,在监听到文件系统变化后,会向相应的应用程序发送事件。

布袋和尚 1395

inotify 的使用介绍

inotify是Linux内核用来通知用户空间程序文件系统发生变化的一种机制。可以使用同样的方式来修改事件掩码,即改变希望被通知的 inotify 事件。inotify 的使用很简单,具体如下。

1423

inotify_init使用

用于监控文件/目录的修改创建删除等操作,也可以配合epoll使用。可以看到删掉之后再创建和操作就不行了。

SurpriseDPD的博客 388
上一篇: git:branch is published (but not merged) and is now commits behind
下一篇: inotify监控Linux文件系统的必备利器
gracioushe
博客等级 码龄25年 62粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值