Linux 监控文件变化

该示例代码展示了如何在Linux环境下,利用Inotify系统调用来实现对指定目录下文件修改、创建等事件的监控。当文件发生修改或创建时,程序会打印相应的事件类型。

    当我们在界面上修改文件时,可以提示用户是否保存此次修改,并以此来发出其他信号。但是当我们的程序后台运行时,怎样自动的监控某个文件的变化呢?

Inotify

    以它为关键字,会搜索到大部分你想要了解的,下面直接贴一个可以在linux下运行的小demo:

平台:ubuntu 14.04

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/inotify.h>


#define EVENT_SIZE  ( sizeof (struct inotify_event) )
#define EVENT_BUF_LEN     (512)
#define CATALOGUE "/root/My_Workspace/test/inotify/catalogueTest"




int main(void)
{
        int length, i = 0;
        int fd;
        int wd;
        char buffer[EVENT_BUF_LEN];


        //inotify初始化
        fd = inotify_init();
        if (fd < 0)
        {
                perror("inotify_init failed: ");
                return -1;
        }


        //监听目录
        wd = inotify_add_watch(fd, CATALOGUE, IN_MODIFY);
        printf("wd = %d\n",wd);


        while(1)
        {
                i = 0;
                length = read(fd, buffer, EVENT_BUF_LEN);
                if (length < 0){
                        perror("read");
                        continue;
                }


                struct inotify_event *event = (struct inotify_event *) &buffer[i];
                if (event->len)
                {
                        if (event->mask & IN_CREATE){
                            printf("IN_CREATE  \n");


                        }else if (event->mask & IN_MODIFY){
                            printf("IN_MODIFY  \n");


                        }else{
                            printf("not \n");
                        }
                }


                //usleep(1000 * 1000);


                printf("you should do sth \n");
        }


        inotify_rm_watch(fd, wd);
        close(fd);


        return 0;
}

效果如下:

a88df09814f0da471bf2e7e5563c63cc.png

        要求全文文字超过300才算原创,以下内容均为凑字数内容:最近一段时间每天6点50开始起床,大概流程如下,6点半闹铃,关了之后再睡10多分钟。起来之后慢慢洗漱,之后七八分钟解决早饭,然后去赶7点30分左右的公交,这个时间不大准~10多分钟后到达公司楼下,然后先绕着下面草坪先转一圈,默念赤壁赋中的一句话“惟江上之清风,与山间之明月,耳得之而为声,目遇之而成色,取之不尽用之不竭,是造物者之无尽藏也”。以我浅显的理解,就是什么都会消失。

可以关注它:

040a2a70115169b335797d72d7bed591.png

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值