监控端主程序
#include <stdio.h>
#include <unistd.h>
#include <stdbool.h>
#include <fcntl.h>
#include <sys/epoll.h>
#include <main.h>
struct event_ext
{
     int fd;
     bool epolled;
     uint32_t events;
     void (*handler)(int fd,void *arg);
     void *arg;
};
struct event_ext *epoll_event_create(int fd,uint32_t type,void (*handler)(int,void *), void *arg)
{
     struct event_ext *e = calloc(1,sizeof(struct event_ext));
     
     e->fd = fd;
     e->events = type;
     e->handler = handler;
     e->arg = arg;
     
     return e;	
}
int epoll_add_event(int epfd,struct event_ext *ev)
{
    struct epoll_event epv;
    int op;
    
    //2. 初始化epoll_event(将附加结构挂载到epoll_event)
    epv.data.ptr = ev;
    epv.events = ev->events;
    
    if (ev->epolled)
    {
        op = EPOLL_CTL_MOD;
    }
    else
    {
        op = EPOLL_CTL_ADD;
        ev->epolled = true;
    }   
    //3. 将epoll_event加入epoll	
    epoll_ctl(epfd,op,ev->fd,&epv);
    
    return 0;
}
int epoll_del_event(int epfd,struct event_ext *ev)
{
	
	epoll_ctl(epfd,EPOLL_CTL_DEL,ev->fd,NULL);
	ev->epolled = false;
	return 0;
}
void epoll_event_free(struct event_ext * ev)
{
    struct event_ext *e = ev; 
    free(e);
}
int main()
{
     struct epoll_event events[512];
     int fds;
     int i;
     uint32_t event;
     struct event_ext *e;
     
     srv_main = calloc(1,sizeof(struct server));
     
     //1. 创建epoll
     srv_main->epfd = epoll_create(512);
     
     //2. 加入等待事件
     srv_main->cam = cam_sys_init();
     srv_main->srv = net_sys_init();
     
     //3. 等待事件发生且处理	
     while (1)
     {
     	fds = epoll_wait(srv_main->epfd,events,512,1000);
     	
     	for(i=0;i<fds;i++)
     	{
             event = events[i].events;
             e = events[i].data.ptr;
             
             if ((event&EPOLLIN)&&(e->events&EPOLLIN))
                 e->handler(e->fd,e->arg);
             
             if ((event&EPOLLOUT)&&(e->events&EPOLLOUT))
                 e->handler(e->fd,e->arg);
             
             if ((event&EPOLLERR)&&(e->events&EPOLLERR))
                 e->handler(e->fd,e->arg);
     	}
     }
     return -1;
}
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号