转自: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常用设计模式整理

    设计模式:一个程序员对设计模式的理解:“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把 ...

  2. Fixed theorems

    Banach Schauder Bourbaki-Kneser

  3. 【转】移动前端手机输入法自带emoji表情字符处理

    http://blog.csdn.net/binjly/article/details/47321043 今天,测试给我提了一个BUG,说移动端输入emoji表情无法提交.很早以前就有思考过,手机输入 ...

  4. Java获取时间与系统时间相差8小时终极解决方案

    一.在取日期以前设置一下时区 TimeZone tz = TimeZone.getTimeZone(“ETC/GMT-8″);TimeZone.setDefault(tz); 此种方法适用于单次快速获 ...

  5. 授予普通域用户远程桌面连接DC/客户端权限

    普通域用户通过远程桌面登录DC: 1)将该用户加入到 Remote Desktop Users 组中

  6. android常见错误-Unexpected namespace prefix "xmlns" found for tag LinearLayout

    有一次升级android开发工具后发现xml脚本出现错误“Unexpected namespace prefix "xmlns" found for tag LinearLayou ...

  7. Codeforces Round #321 (Div. 2) A. Kefa and First Steps 水题

    A. Kefa and First Steps Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/58 ...

  8. 17周 oj 比較大小 类模板

    /*声明一个类模板,利用它分别实现两个整数. 浮点数和字符的比較,求出大数和小数. 说明:在类模板外定义各成员函数. 输入两个整数.两个浮点数和两个字符 从大到小输出两个整数.两个浮点数和两个字符 * ...

  9. Linux中的文件描述符与打开文件之间的关系------------每天进步一点点系列

    http://blog.csdn.net/cywosp/article/details/38965239 1. 概述     在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件. ...

  10. careercup-中等难度 17.12

    17.12 设计一个算法,找出数组中两数之和为指定值的所有整数对. 解答 时间复杂度O(n)的解法 我们可以用一个哈希表或数组或bitmap(后两者要求数组中的整数非负)来保存sum-x的值, 这样我 ...