linux开发 -- 文件监控 inotify

2024-01-24 12:48
文章标签 linux 开发 监控 inotify

本文主要是介绍linux开发 -- 文件监控 inotify,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

从linux 2.6.13开始引入inotify来监控文件,代替旧的dnotify。因此旧版本的glibc并不提供inotify系统调用的封装。


头文件 sys/inotify

int inotify_init()
   创建一个inotify实例,并返回一个引用inotify实例文件描述符,文件描述符使用close()关闭

int inotify_add_watch(int fd, const char *pathname, uint32_t mask);
   添加或修改一个监控pathname的mask事件的watch到fd的watch列表中,也就是一个inotify实例可监控多个目录或文件
   fd: inotify实例的文件描述符
   pathname: 监控的路径
   mask: 监控的类型掩码
     一共有三类掩码,文件的事件,用来控制inotify_add_watch的掩码,除了文件事件read可能返回的事件
       文件事件
       IN_ACCESS
       IN_ATTRIB
       IN_CLOSE_WRITE
       IN_CLOSE_NOWRITE
       IN_CREATE
       IN_DELETE
       IN_DELETE_SELF
       IN_MODIFY
       IN_MOVE_SELF
       IN_MOVED_FROM
       IN_MOVED_TO
       IN_OPEN
       IN_ALL_EVENTS
       IN_MOVE = IN_MOVE_FROM | IN_MOVE_TO
       IN_CLOSE = IN_CLOSE_NOWRITE | IN_CLOSE_WRITE
       添加watch是可以使用的mask
       IN_DONT_FOLLOW
       IN_MASK_ADD
       IN_ONESHOT
       IN_ONLYDIR
       可能被read返回的mask
       IN_IGNORED
       IN_ISDIR
       IN_Q_OVERFLOW
       IN_UNMOUNT
   返回值: 成功返回一个非负整形,代表watch描述符,失败返回-1并且设置errno

int inotify_rm_watch(int fd, uint32_t wd);
    从inotify实例的watch列表中删除watch
    返回值: 成功 = 0 失败 = -1

使用read监控文件操作事件
read将返回一个或多个struct inotify_event
   struct inotify_event {
      int wd;   //watch描述符
      uint32_t mask;   //事件掩码 
      uint32_t cookie;  //用来关联相关事件的唯一整数值(目前仅用于rename事件和IN_MOVE_FROM,IN_MOVE_TO的关联)
      uint32_t len;   //name字段的长度
      char name[] //发出事件的文件名
   }
当缓冲区过小时,返回值以来内核版本 2.6.21返回0,之后版本返回EINVAL

inotify还有三个proc文件系统接口,用来控制inotify消耗的内核内存,也可通过sysctl修改
/proc/sys/fs/inotify/max_queued_events 最大事件队列
/proc/sys/fs/inotify/max_user_instances 用户最多能创建inotify实例数
/proc/sys/fs/inotify/max_user_watches 每个实例可以拥有的watch数



这篇关于linux开发 -- 文件监控 inotify的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/639745

相关文章

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Linux命令之firewalld的用法

《Linux命令之firewalld的用法》:本文主要介绍Linux命令之firewalld的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux命令之firewalld1、程序包2、启动firewalld3、配置文件4、firewalld规则定义的九大

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文