转自: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的填充字段统计在内

最新文章

  1. 基于AngularJS的企业软件前端架构[转载]
  2. html选择图片后预览,保存并上传
  3. 在项目中添加ReactiveCocoa #安装与配置
  4. Spring RabbitMq概述
  5. 关于css3的动画总结
  6. poj1012
  7. 转:python webdriver API 之设置等待时间
  8. python流程控制语句 ifelse - 4
  9. linux查看硬件环境
  10. 中文字体在CSS中的表达方式
  11. java 手动清理缓存的方法
  12. 【MongoDB】学习MongoDB推荐三本书
  13. 查看文章strncpy()功能更好的文章
  14. 转:Web 测试的创作与调试技术
  15. C++框架_之Qt的开始部分_概述_安装_创建项目_快捷键等一系列注意细节
  16. Excel 恢复默认行高、列宽
  17. SQL Server2012如何导出sql脚本并且还原数据库
  18. Java简单介绍及Java生态
  19. JMeter http(s)请求插件jmeter-plugin-httpBinaryFileUpload.jar
  20. tensorflow/core/kernels/conv_ops.cc:659] check failed: stream-&gt;parent()-&gt;getc

热门文章

  1. mysql 开启记录慢查询记录
  2. 通过VMName获取VM IP
  3. windows 2003 远程登录时如何修改管理员密码
  4. NYOJ109 数列转换 【守恒法】
  5. Android使用的开发MediaRecorder录制视频
  6. android126 zhihuibeijing 极光推送
  7. careercup-C和C++ 13.2
  8. 学习笔记之JAVA多线程
  9. 五、Socket之UDP异步传输文件-实现传输中取消传送
  10. if elseif else