zoukankan      html  css  js  c++  java
  • (转)使用inotify、inotify_add_watch、inotify_rm_watch、read编写监控程序

    转自: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的填充字段统计在内
  • 相关阅读:
    Conntect Bluetooth devices in iOS.
    Why NSAttributedString import html must be on main thread?
    IOS7 SDK 几宗罪
    How to browse the entire documentation using XCode 5 Documentation and API Reference ?
    High Precision Timers in iOS / OS X
    [UWP]抄抄《CSS 故障艺术》的动画
    [Microsoft Teams]使用连接器接收Azure DevOps的通知
    [WPF 自定义控件]自定义一个“传统”的 Validation.ErrorTemplate
    [WPF 自定义控件]在MenuItem上使用RadioButton
    [WPF 自定义控件]创建包含CheckBox的ListBoxItem
  • 原文地址:https://www.cnblogs.com/buptlyn/p/4448526.html
Copyright © 2011-2022 走看看