inotify的安装与使用

下载

       链接:https://pan.baidu.com/s/1jt6TqwWv5e9qsDK5Roi4mw 密码:vdab

配置

        

        

        

        

        

描述

    inotify机制可用于监控文件或目录。当监控目录时,与该目录自身以及该目录下面的文件都会被监控,其上有事件发生时都会通知给应用程序。

    inotify监控机制为非递归,若应用程序有意监控整个目录子树内的事件,则需对该树中的每个目录发起inotify_add_watch()调用。

    可使用select(),poll(),epoll()以及由信号驱动的I/O来监控inotify文件描述符。

API


    该函数创建一个新的inotify实例。返回值为一个文件描述符。


    name为监控所对应的文件或者目录。mask为一位掩码,针对name定义了想要监控的事件,返回值为一个用于唯一指代此监控项的描述符。

inotify事件









读取inotify事件

inotify的安装与使用_第1张图片

示例

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

int parse_filename(char *name)
{
	int len = strlen(name);
	char *num = "4913";
	for (int i = 0;i= (int)sizeof(*event)) {
		event = (struct inotify_event *)(event_buf + event_pos);
		if (parse_filename(event->name)){
			if(event->len) {
				if(event->mask & IN_DELETE) {
					printf("delete file: %s\n", event->name);
				} else if (event->mask & IN_CREATE){
					printf("create file:%s\n", event->name);
				} else if (event->mask & IN_CLOSE_NOWRITE) {
					printf("close now rite file:%s\n", event->name);
				}else if (event->mask & IN_CLOSE_WRITE) {
					printf("close write file: %s\n", event->name);
				}
			}
		}
		event_size = sizeof(*event) + event->len;
		ret -= event_size;
		event_pos += event_size;
	}
	return 0;
}



void *scan_thread(void *args)
{   
	int inotify_fd;
	int events = 0
	int ret = 0;
	inotify_fd = inotify_init();
	if (inotify_fd < 0){
		printf("inotify_init error\n");
		return NULL;
	}
	if (!events){
		events = IN_ALL_EVENTS;
	}
	ret = inotify_add_watch(inotify_fd, "../dir", events);
	while (1){
		read__inotify_fd(inotify_fd);
	}
	return NULL;
}

int run_scan()
{
	pthread_t tid;
	int ret;
	ret = pthread_create(&tid, NULL, scan_thread, (void *)&tid);
	if (ret != 0){
		printf("create scan pthread error:%s\n", strerror(errno));
		return -1;
	}
	return 0;

}


int main(int argc, char *argv[])
{
	run_scan();
	while(1);
	return 0;
}

你可能感兴趣的:(Linux)