当我们在界面上修改文件时,可以提示用户是否保存此次修改,并以此来发出其他信号。但是当我们的程序后台运行时,怎样自动的监控某个文件的变化呢?
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;
}效果如下:

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

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





