转自:http://blog.csdn.net/myarrow/article/details/7096460

inotify是什么

inotify是文件系统变化通知机制,在监听到文件系统变化后,会向相应的应用程序发送事件

典型的应用场景是文件管理器,理想情况下是用户修改了文件内容后立刻显示出文件最新的内容,而刷新后才显示,如果没有inotify机制,一般会采用轮询的方式实现这种功能,这不能再第一时间反应文件系统的变化,而且浪费CPU时间

inotify用户接口

inotify通过三个系统调用和在返回的文件描述符上的文件I/O操作来使用

#include <sys/inotify.h>

int inotify_init()//初始化inotify,每个inotify实例对应一个排队的序列

int inotify_add_watch(int fd,const char *path,uint32_t mask)//通过文件名和事件掩码添加一个watch对象,返回值是watch对象的描述符
//fd:inotify_init的返回值
//path:要监控的文件路径
//mask:监听文件的哪些事件
/*
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,文件被打开
*/
//返回值:表示对那个文件的监视 int inotify_rm_watch(int fd,uint32_t wd)//删除监视对象
//fd:inotify_init的返回值
//wd:inotify_add_watch的返回值 //文件事件用struct inotify_event表示,通过fd由read函数来读取
//buf是inotify_event结构的数组的指针,BUF_LEN 指定要读取的总长度,buf的长度不能小于BUF_LEN
//read读取到的事件数取决于BUF_LEN以及事件中文件名的长度,返回实际读取的长度
size_t len = read (fd, buf, BUF_LEN); struct inotify_event
{
__s32 wd; /* watch descriptor */
__u32 mask; /* watch mask */
__u32 cookie; /* cookie to synchronize two events */
__u32 len; /* length (including nulls) of name */
char name[0]; /* stub for possible name */
};
//文件名是变长的,实际紧跟在该结构的后面,文件名被0填充以保证下一个事件结构能够4字节对齐。
//len字段也把name的填充字段统计在内

(转)使用inotify、inotify_add_watch、inotify_rm_watch、read编写监控程序的更多相关文章

  1. 基于redis ae实现 Linux中的文件系统监控机制(inotify)

    (英文部分为转的.代码是个人代码) 1 What's inotify  The inotify API provides a mechanism for monitoring file system ...

  2. rsync+inotify实时数据同步多目录实战

    rsync+inotify实时数据同步多目录实战       inotify配置是建立在rsync服务基础上的配置过程 操作系统 主机名 网卡eth0 默认网关 用途 root@58server1 1 ...

  3. rsync+inotify实现全网自动化数据备份

    第1章 环境配置 实例1-1 服务器及IP主机名规划 已知 4 台服务器主机名主机对应信息见下表: 服务器说明 外网 IP(NAT) 内网 IP(NAT)  主机名 web服务器 10.0.0.7/2 ...

  4. PHP7函数大全(4553个函数)

    转载来自: http://www.infocool.net/kb/PHP/201607/168683.html a 函数 说明 abs 绝对值 acos 反余弦 acosh 反双曲余弦 addcsla ...

  5. python模块------pyinotify

    介绍 pyinotify模块用来监测文件系统的变化,依赖于Linux内核的inotify功能,inotify是一个事件驱动的通知器,其通知接口从内核空间到用户空间通过三个系统调用.pyinotify结 ...

  6. day10、nfs+rsync全网备份及实时同步

    题目要求 注意:博主使用的系统为: [root@web01 ~]# uname -a Linux web01 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29 ...

  7. rsync+innotify做到同步式更新

    innotify主要功能: 他是内核用于通知用户控件程序文件系统变化的机制. 也就是说,当服务器发生了任何的改动,内核都会知道并通知用户. rssync(做同步的)+innotify做到的就是实时的同 ...

  8. keepalived+nginx+lnmp 网站架构

    <网站架构演变技术研究> 项目实施手册 2019年8月2日 第一章:  实验环境确认 4 1.1-1.系统版本 4 1.1-2.内核参数 4 1.1-3.主机网络参数设置 4 1-1-4 ...

  9. day22 定时任务

    检查软件是否安装 cronie [root@oldboyedu ~]# rpm -qa cronie cronie-1.4.11-19.el7.x86_64 [root@oldboyedu ~]# r ...

随机推荐

  1. java异步任务处理

    1.场景 最近做项目的时候遇到了一个小问题:从前台提交到服务端A,A调用服务端B处理超时,原因是前端一次请求往db插1万数据,插完之后会去清理缓存.发送消息. 服务端的有三个操作 a.插DB b.清理 ...

  2. IOS设置button 图片 文字 上下、左右

    [btn setImage:imgNor forState:UIControlStateNormal]; [btn setImage:imgSel forState:UIControlStateSel ...

  3. linux修改文件权限和用户组管理小结

    如何在linux下修改组权限 chmod g+r path/file 加读权限 当前目录 chmod -R g+r path/file 加读权限 当前目录以及子目录 g-r 减读权限g+w 加写权限g ...

  4. 如何在Linux桌面环境下自动启动程序?

    大多数Linux桌面环境有各自的图形用户界面(GUI),让用户可以配置针对特定用户的自动启动程序或服务.本文将介绍如何在各种Linux桌面环境下,自动启动某个程序的方法. AD:WOT2014:用户标 ...

  5. Android_gridView_LIstener_examle

    layout.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" x ...

  6. iOS开发中图片方向的获取与更改

    iOS开发中 再用到照片的时候  或多或少遇到过这样的问题  就是我想用的照片有横着拍的有竖着排的  所以导致我选取图片后的效果也横七竖八的   显示效果不好 比如: 图中红圈选中的图片选取的是横着拍 ...

  7. Elasticsearch 查询与过滤

    今天在给上级汇报工作的时候,被问到了这个问题,一时也没回到上来. 英文原文: https://www.elastic.co/guide/en/elasticsearch/guide/current/_ ...

  8. CentOS7安装RabbitMQ集群

    实验环境 RabbitMQ 集群 server1.example.com    IP: 10.10.10.11    Node: diskserver2.example.com    IP: 10.1 ...

  9. tomcat服务器使用简介

    tomcat服务器的应用与部署:1:下载tomcat服务器可以到http://tomcat.apache.org/下载apache服务器,左侧有各种版本的服务器,可以根据自己的需要下载,如果是是Lin ...

  10. 基于嵌入式的c语言连接器

      一个C程序可能是由多个分别编译的部分组成,这些不同部分通过一个通常叫做链接器(或连接器,载入器)的程序合并成一个整体.因为编译器一般每次只处理一个文件,所以它不能检测出那些需要一次了解多个源程序文 ...