zoukankan      html  css  js  c++  java
  • inotify使用代码

    #include <stdio.h>
    #include <sys/epoll.h>
    #include <stdlib.h>
    #include <sys/inotify.h>
    
    #define FDMAXNUM (1024)
    #define MAXEVENTS (64)
    #define FAILURE_EXIT (-1)
    #define INOTIFYEVENTBUFSIZE (1024)
    
    int main(int argc, char**argv){
    
        int ifd = inotify_init();
        if(ifd==-1){
    	perror("inotify_init failed");
    	exit(FAILURE_EXIT);
        }
        char ibuf[INOTIFYEVENTBUFSIZE] __attribute__((aligned(4))) = {0} ;
    
        int efd=epoll_create(FDMAXNUM);
        if(efd==-1){
    	perror("epoll_createfailed");
    	exit(FAILURE_EXIT);
        }
        
        int ret = -1;
        struct epoll_event event;
        event.data.fd = ifd;
        event.events = EPOLLIN; 
    
        ret = epoll_ctl(efd, EPOLL_CTL_ADD, ifd, &event);
        if(ret==-1) {
    	perror("epoll_ctl failed");
    	exit(FAILURE_EXIT);
        }
    
        int wd = inotify_add_watch(ifd, "/home/yaozh/Videos",IN_ACCESS);
        if (wd==-1) {
    	perror("inotify_add_watch failed");
    	exit(FAILURE_EXIT);
        }
    
        //wait for change event to come
        int eventnum = -1;
        struct epoll_event *events = malloc(sizeof(struct epoll_event) * MAXEVENTS);
        do {
    	eventnum = epoll_wait(efd, events, MAXEVENTS, -1);
    	if (eventnum==-1){
    	    perror("epoll_wait failed");
    	    free(events);
    	    exit(FAILURE_EXIT);
    	}
    	int len = 0;
    	len = read(ifd, ibuf,INOTIFYEVENTBUFSIZE);
    	while (len) {
    	    int i=0;
    	    while(i<len) {
    		struct inotify_event *event = (struct inotify_event*)(ibuf+i);
    		if(event->len) {
    		    printf("name is %s\n", event->name);
    		}
    		i += sizeof(struct inotify_event) + event->len;
    	    }
    	    len = read(ifd, ibuf, INOTIFYEVENTBUFSIZE);
    	}
        } while (eventnum);
    	
        free(events);
    
        ret = close(efd);
        if(ret==-1) {
    	perror("close epoll fd failed");
    	exit(FAILURE_EXIT);
        }
        ret = close(ifd);
        if(ret==-1) {
    	perror("close inotify fd failed");
    	exit(FAILURE_EXIT);
        }
    
        return 0;
    }
    
  • 相关阅读:
    08.3 属性描述符__get__ __set__ __delete__
    08.2 __getattr__ 和 __getattribute__
    08.1 property 装饰器
    appium脚本编写,元素定位,隐式等待
    appium的安装和介绍
    docker镜像构建
    dockerfile的语法和指令
    docker的registry介绍
    docker-compose使用
    docker部署Jenkins
  • 原文地址:https://www.cnblogs.com/zelos/p/2123596.html
Copyright © 2011-2022 走看看