Linux 监控文件事件
某些应用程序需要对文件或者目录进行监控,来侦测其是否发生了某些事件。Linux很贴心的为我们提供了inotify API,也是Linux的专有。
inotify API
在使用之前一定要有一个inotify实例,int inotify_init(void);返回一个inotify实例的描述符。
添加监控描述符,int inotify_add_watch(int fd,const char *pathname,unit32_t mask);参数解释:fd就是init返回的描述符,pathname就是你要监控的文件或者目录的路径名,mask这个是用来表示你要监控的事件类型。
删除监控描述符,int inotify_rm_watch(int fd,uint32_t wd);参数解释:fd还是你要操作的描述符,wd是你要删除监控描述符号。

inotify事件
inotify事件实现原理
原理肯定需要数据结构来支撑了,先来一个inotify的通知事件数据结构:
struct inotify_event{
int wd;监控描述符
uint32_t mask;发生的事件
uint32_t cookie;这个专为文件重命名而生,源文件所在监控会产生一个IN_MOVED_FROM事件,重命名后文件所在监控会产生一个IN_MOVED_TO事件(如果在同一个监控下重命名,会对这个监控项产生这两个事件)。这两个事件的cookie值相等,方便应用程序将他俩事件关联起来。多么巧妙而朴实的设计啊。
uint32_t len;name字符串的长度
char name[];表示受监控目录下发生事件的文件名,以\0结尾。\0结尾后可能有填充字符。
}
这个地方我要吐槽下这个char name[];C不支持但是C++支持。在算结构体大小的时候,他的大小为0。但是我们为这个char name[]开辟空间的时候,可以通过直接添加长度。举例说明一下,我要用这个结构体去填充我的一个buffer,char buffer[LEN];我们可以这么定义LEN:#define LEN 10*(sizeof(struct inotify_event)+10),这样我们的buffer的数据空间就可以用下图来表示。

调用read就能从内核读取所发生的事件,如果事件队列为空,read就阻塞。
Linux 监控文件事件的更多相关文章
- 【不积跬步,无以致千里】五个常用的Linux监控脚本代码
为大家提供五个常用Linux监控脚本(查看主机网卡流量.系统状况监控.监控主机的磁盘空间,当使用空间超过90%就通过发mail来发警告.监控CPU和内存的使用情况.全方位监控主机),有需要的朋友不妨看 ...
- Linux ---> 监控JVM工具
Linux ---> 监控JVM工具shkingshking 发布时间: 2013/10/10 01:27 阅读: 2642 收藏: 26 点赞: 1 评论: 0 JDK内置工具使用 jps(J ...
- Linux监控
第三十次课 Linux监控 目录 一. Linux监控平台介绍 二. zabbix监控介绍 三. 安装zabbix 四. 忘记Admin密码如何做 五. 主动模式和被动模式 六. 添加监控主机 七. ...
- zabbix系列 ~ linux监控相关
Linux 监控 一 相关名词解释 cpu context switch (上下文切换) 1 定义 CPU给每个任务一定的服务时间,当时间片轮转的时候,需要把当前状态保存下来,同时加载下一个 ...
- Linux监控平台、安装zabbix、修改zabbix的admin密码
1.Linux监控平台 2. zabbix监控 3.zabbix的安装下载:wget -c https://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbi ...
- Linux监控重要进程的实现方法
Linux监控重要进程的实现方法 不管后台服务程序写的多么健壮,还是可能会出现core dump等程序异常退出的情况,但是一般情况下需要在无 人为干预情况下,能够自动重新启动,保证服务进程能够服务用户 ...
- Linux 监控分析
一.硬件基础 Cpu 逻辑的处理.计算.判断 现代分时多任务操作系统对 CPU 都是分时间片使用的:比如A进程占用10ms,然后B进程占用30ms,然后空闲60ms, 再又是A进程占10ms,B进 ...
- 几个常用的Linux监控脚本
几个常用的Linux监控脚本 几个常用的Linux监控脚本下面是几个主机监控的脚本,大家可以根据自己的情况再进行修改,希望能给大家一点帮助.1.查看主机网卡流量#!/bin/bash#network# ...
- LINUX监控一:监控命令
简单的整理一下常用的linux监控命令 本篇参考了:http://www.cnblogs.com/JemBai/archive/2010/07/30/1788484.html的内容 1.top top ...
随机推荐
- web开发路径问题
1. web开发路径问题总结: http://www.cnblogs.com/tianguook/archive/2012/08/31/2665755.html 2. JSP/SERVLET 路径问题 ...
- VB.net结束进程
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ...
- Android 面试题(转)
转自:http://www.jobui.com/mianshiti/it/android/2682/ 1. Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念DVM指da ...
- 第三十节,正则表达式re模块
正则表达式 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序员们可以直接调用来实现正则匹配.正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引 ...
- arTemplate解析语法
模板解析语法 defaults.parser = function (code, options) { // var match = code.match(/([\w\$]*)(\b.*)/); // ...
- hdu_3063_Play game(数论)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3063 题意:中文题,说的很清楚,不解释 题解:公式题,具体看代码 #include<stdio. ...
- Android数据库--Sqlcipher的使用(二)
1.使用Sqlcipher对数据库加密,并结合ORM框架LitePal进行使用. 2.对LitePal的使用我就不在讲解了,大家可以参考下面七篇博客: http://blog.csdn.net/guo ...
- R语言笔记4--可视化
接R语言笔记3--实例1 R语言中的可视化函数分为两大类,探索性可视化(陌生数据集,不了解,需要探索里面的信息:偏重于快速,方便的工具)和解释性可视化(完全了解数据集,里面的故事需要讲解别人:偏重全面 ...
- Storyboard中拖拽控件不能运行的问题(在运行的时候,相应的控件代码没有被执行)
具体问题见 http://q.cnblogs.com/q/62183/ storyboard Table view上Selection 那一项要用single selection
- Linux 系统监控
*lsof 列出打开的文件 常用 lsof -i:8080*htop进程监控iotop(bugs)iptraf实时局域网IP监控psacct 监视用户活动monit Linux进程和服务监控工具* ...