基于视频压缩的实时监控系统-A4:main.c代码解析
2017-04-09 16:39
791 查看
#include <main.h> #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/epoll.h> #include <sys/stat.h> #include <stdbool.h> //为epoll_event 结构体附加一个结构体 struct event_ext { int fd; bool epolled; uint32_t events; void (*handler) (int fd,void *arg); void *arg; }; /* *函数功能:创建一个事件附加结构 */ struct event_ext *epoll_event_creat(int fd,uint32_t type,void (*handler)(int,void*),void *arg) { struct event_ext *e; e = calloc(1,sizeof(struct event_ext)); //为结构体分配空间 e->fd = fd; //初始化结构体 e->events = type; e->handler = handler; e->arg = arg; return e; } /* *函数功能:添加事件到epoll */ int epoll_add_event(int epfd,struct event_ext *ev) { struct epoll_event epv; int op; //初始化epoll_event,并将附加结构挂载在epoll_event epv.data.ptr = ev; epv.events = ev->events; if(ev->epolled) //true 修改事件 { op = EPOLL_CTL_MOD; } else //false 添加事件 { op = EPOLL_CTL_ADD; ev->epolled = true; } //将epoll_event 加入 epoll池 epoll_ctl(epfd,op,ev->fd,&epv); } /* *函数功能:从epoll删除事件 */ int epoll_del_event(int epfd,struct event_ext *ev) { epoll_ctl(epfd,EPOLL_CTL_DEL,ev->fd,NULL); ev->epolled = false; return 0; } int main() { int fds; int i; struct epoll_event events[512]; uint32_t event; struct event_ext *e; //分配空间 srv_main = calloc(1,sizeof(struct server)); //创建epoll srv_main->epfd = epoll_create(512); //加入事件 srv_main->cam = cam_sys_init(); srv_main->srv = net_sys_init(); //等待事件发生且处理 while(1) { fds = epoll_wait(srv_main->epfd,events,512,1000); //等待1000ms for(i=0;i<fds;i++) { event = events[i].events; e = events[i].data.ptr; if(event & EPOLLIN) { e->handler(e->fd,e->arg); } if(event & EPOLLOUT) { e->handler(e->fd,e->arg); } if(event & EPOLLERR) { e->handler(e->fd,e->arg); } } } return -1; }
相关文章推荐
- 基于视频压缩的实时监控系统-A3:Makefile和main.h解析
- 基于视频压缩的实时监控系统-A6:cam.c代码解析
- 基于视频压缩的实时监控系统-A7:cfg.c代码解析
- 阶段4-独挡一面\项目-基于视频压缩的实时监控系统\Sprint3-采集端传输子系统设计
- 基于视频压缩的实时监控系统-A2:linux中最优秀的多路复用机制Epoll
- 基于motion的视频压缩的实时监控系统
- 基于视频压缩的实时监控系统-A5:net.c代码解析
- 基于视频压缩的实时监控系统-A0:目录
- 项目-基于视频压缩的实时监控系统--tiny6410
- 基于视频压缩的实时监控系统-A1:产品设计与规划
- SHELL脚本共享:系统实时监控程序(基于TOP指令优化)
- 基于pcDuino的WiFi实时视频监控智能小车-——前言
- 基于Android的视频监控系统设计与实现
- 基于Linux的视频监控系统构建方法
- 基于VW2010的视频压缩存储系统的软硬件设计
- 基于嵌入式Linux的视频采集系统20-----源程序----stlmain.cpp
- 基于B/S模式的嵌入式视频监控系统的设计
- 基于ARM的视频监控系统的设计与实现
- 基于AVI的网络视频监控存储系统的实现方法
- 基于VFW的视频监控系统