免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 948 | 回复: 0
打印 上一主题 下一主题

文件监视器 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-03 20:32 |只看该作者 |倒序浏览
受人所托,写了个文件监视器小程序,总共300+行,实现对指定文件的监视功能,当文件新增,删除,或被修改,程序予以记录并报告。
   实现是通过不断扫描指定的文件,通过比较两次扫描的状态来判断文件的变化。
文件状态数据结构:
/* filestat struct for monitoring */
typedef struct filestat
{
    char f_name[FNAME_MAX];
    struct stat f_stat;
    int f_flag;    /* 0 for del,
                  1 for add, 2 for modified , 3 for unchanged */
    struct filestat *next;
}filestat;
   设计思路:对指定的文件,文件夹进行扫描,获取文件状态并记录在statlist链表中,没扫描一个文件,在statlist中查找,如果没有找到,则为新增文件,插入到链表,并置f_flag为1;如果找到,比较mtime和ctime,如果相同,则说明,文件内容,Inode都没有发生变化,则文件未发生变化,置f_flag为3,如果不同,则说明文件被修改过,置f_flag为2。
    扫描完成后对链表执行check操作,如果为1(而且不是第一次扫描),打印添加日志,如果为2打印修改日志,为3则为变化,check后置f_flag为0,所以当check中的f_flag为0时,说明文件被删除。。。。
   调试中遇到段错误,虽然后来改过来了,但还是不知道错误处在哪里。第一次使用gdb发现程序问题,对执行过程进行跟踪。并使用宏来决定是否打印调试日志(这点很重要,跟一个师兄学的,在程序里用了下)。
//#define MONITOR_DEBUG   /* for debug, comment it to run in non debug mod */

#ifdef MONITOR_DEBUG
    #define PDEBUG(format, arg...) fprintf(stderr, format, ##arg)
#else
    #define PDEBUG(format, arg...)
#endif
总的感觉,自己的基本功还不够扎实,linux c 里面很多东西没用过。。。加油

       
        文件:monitor.tar
        大小:20KB
        下载:
下载
       


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/87570/showart_1771101.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP