文件监视器

受人所托,写了个文件监视器小程序,总共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
下载: 下载




 
posted @ 2013-04-19 14:03  ydzhang  阅读(301)  评论(0编辑  收藏  举报