精通epoll架构

  epollLinux中最优秀的多路复用机制!

与select 、poll区别

1.select和poll没有太大区别,除了select有文件描述符限制(1024个)。select每次调用都需要将fd集合拷贝到内核态,且监听过程遍历所有的文件位置,开销很大。

2.Epoll监测无上限,在注册新事件时就会一次性把所有fd拷贝到内核,无序遍历即可查询到监听位置,提高效率。

  优势:1)多路复用;  2)阻塞IO;  3)无需遍历所有文件即可知道错误的文件位置(高效)  4)监控文件无上限

多路复用:一个进程同时监控多个文件或设备;

阻塞IO   :进程执行过程中,无命令处理时进程休眠,有命令待处理时,唤醒进程处理命令;(避免在无命令时进程忙等占用CPU,高效)

  epoll支持管道FIFO、套接字socket、POSIX消息队列、终端等,但不支持普通文件。epoll分成如下三个环节:

创建epoll监听池 epfd = epoll_create(50)            返回epfd指向创建的监听池 
添加epoll监听事件

epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event)

监听池epfd  操作符  要监听文件的fd  监听结构类型

等待监听事件发生 n = epoll_wait(epfd, events, 100, -1)     返回事件发生个数
int main()
{
int fd1,fd2,efd;
struct epoll_event event;
struct epoll_event *events;
// 创建FIFO
mkfifo("/tmp/fifo1",); //要创建的FIFO文件的名字(含路径)
mkfifo("/tmp/fifo2",);
fd1=open("/tmp/fifo1",O_RDONLY); //打开管道文件监听
fd2=open("/tmp/fifo2",O_RDONLY); //1. 创建监听池
efd = epoll_create1(0);
//2. 构造监听事件,加入监听池
event.events = EPOLLIN|EPOLLET; //可读 边沿触发
event.data.fd = fd1; //关注的文件
epoll_ctl(efd,EPOLL_CTL_ADD,fd1,&event);
/* 分别两管道构造 */
event.events = EPOLLIN|EPOLLET; //可读
event.data.fd = fd2; //关注的文件
epoll_ctl(efd,EPOLL_CTL_ADD,fd2,&event); //添加事件到监听池
//3. 等待事件的发生
events = calloc(,sizeof event); //保存事件的数组
n=epoll_wait(efd,events,100,-1);
for(i=;i<n;i++)
{
if(events[i].events&EPOLLIN)
{
read(events[i].data.fd,&c,);
printf("file %d can be read\n",events[i].data.fd);
}
}
free(events); close(fd1); close(fd2);//关闭打开的文件+释放申请的堆内存
}

检测:分别编写程序,向两个管道文件内写入数据,编译运行 -> epoll立即检测到事件发生。

----------------------------------------------------------------------------------------------------------

epoll架构加入摄像头采集端,监听摄像头是否采集到数据(应用用途)

  创建基本的监听架构,将摄像头采集端作为监听事件,添加至监听池,当监听到摄像头捕捉到图像文件时,即自动触发启动对应的处理函数,将获取到图片数据发送至显示子系统,添加移植至GTK程序即可实现视频采集播放。

3-1. 基于epoll架构的视频采集端设计的更多相关文章

  1. 基于视频压缩的实时监控系统-sprint1基于epoll架构的采集端程序设计

    part1:产品功能 part2:epoll机制   select与epoll区别 1.select与epoll没有太大的区别.除了select有文件描述符限制(1024个),select每次调用都需 ...

  2. 基于PCIe的多路视频采集与显示子系统

    基于PCIe的多路视频采集与显示子系统 1        概述 视频采集与显示子系统可以实时采集多路视频信号,并存储到视频采集队列中,借助高效的硬实时视频帧出入队列管理和PCIe C2H DMA引擎, ...

  3. 基于.NET架构的树形动态报表设计与应用

    在一些统计报表中,利用树形结构报表来实现维度钻取功能是十分常见的.通过逐级钻取,可以快速查看更细粒度的指标数据,如项目施工进度报告等. 使用葡萄城报表控件——ActiveReports ,即可轻松设计 ...

  4. 基于Hi3559AV100的视频采集(VDEC-VPSS-VO)整体框图设计

    下面给出基于Hi3559AV100的视频采集整体设计,具体设计将在后续给出: 图形采集端整体设计 Hi3559AV100软件程序按结构划分可分为4层,第一层是硬件驱动层,第二层是操作系统层,第三层是媒 ...

  5. 基于H5的摄像头视频数据流采集

    最近,为了支持部门团队的项目,通过H5实现摄像头的视频流数据的捕获,抓取到视频流后,传输到视频识别服务器进行后续的逻辑处理. 视频数据的采集过程,其实是比较没有谱的过程,因为之前没有研究过HTML5操 ...

  6. 基于Linux的v4l2视频架构驱动编写(转载)

    转自:http://www.linuxidc.com/Linux/2011-03/33022.htm 其实,我刚开始一直都不知道怎么写驱动,什么都不懂的,只知道我需要在做项目的过程中学习,所以,我就自 ...

  7. 基于Linux的v4l2视频架构驱动编写

    其实,我刚开始一直都不知道怎么写驱动,什么都不懂的,只知道我需要在做项目的过程中学习,所以,我就自己找了一个关于编写Linux下的视频采集监控项目做,然后上学期刚开学的时候听师兄说,跟院长做项目,没做 ...

  8. 轻松构建基于 Serverless 架构的弹性高可用音视频处理系统

    前言 随着计算机技术和 Internet 的日新月异,视频点播技术因其良好的人机交互性和流媒体传输技术倍受教育.娱乐等行业青睐,而在当前, 云计算平台厂商的产品线不断成熟完善, 如果想要搭建视频点播类 ...

  9. 基于FPGA的LCD+CMOS视频采集显示使用小结

    基于FPGA的LCD+CMOS视频采集显示 液晶显示器采用扫描模式,RGB888 电源采用:+5V供电 usb供电有时候会出现供电不足的问题 显示器接口有两种选择:16bit或24bit  分别对应 ...

随机推荐

  1. video标签加载视频有声音却黑屏

    问题 昨天用户上传了一个视频文件,然而发现虽然有声音但是黑屏. 解释 因为原视频的编码是用 mp4v 格式的,它需要专用的解码器.而 chrome 并不支持,所以无法播放. 然后如果用转码功能转成用 ...

  2. 自动控制理论的MATLAB仿真实例(二)

    %求方程的解 x=sym('x'); fx=(3*x*x+2*x)*(x*x+2.32*x+4)-(2*x+2.32)*(x*x*x+x*x) fx = 

  3. java第一次上机练习作业

    1.已知a,b均是整型变量,写出将a,b两个变量中的值互换的程序.(知识点:变量和 运算符综合应用) int a = 5, b = 10; int temp; temp = a; a = b; b = ...

  4. JVM 参数(转)

    Herry灬凌夜  转自:https://www.cnblogs.com/wuyx/p/9627542.html 常用的JVM配置参数 一.Trace 跟踪参数 在Eclipse中,如何打开GC的监控 ...

  5. Java已五年1—二本物理到前端实习生到Java程序员「回忆贴」

    关键词:郑州 二本 物理专业 先前端实习生 后Java程序员 更多文章收录在码云仓库:https://gitee.com/bingqilinpeishenme/Java-Tutorials 前言 没有 ...

  6. 初始Django—Hello world

    1. 准备环境 > python -V Python > pip -V pip from c:\python3\lib\site-packages\pip (python 3.7) > ...

  7. 金三银四,还在为spring源码发愁吗?bean生命周期,看了这篇就够了

    第一,这绝对是一个面试高频题. 比第一还重要的第二,这绝对是一个让人爱恨交加的面试题.为什么这么说?我觉得可以从三个方面来说: 先说会不会.看过源码的人,这个不难:没看过源码的人,无论是学.硬背.还是 ...

  8. Spring框架——IOC 容器的创建与使用

    企业级开发框架 Spring Framework 是整个 Spring 生态的基础,各个模块都是基于 Spring Framework 衍生出来的. Spring 的两大核心机制 IOC 控制翻转.A ...

  9. 图数据库 Nebula Graph TTL 特性

    导读 身处在现在这个大数据时代,我们处理的数据量需以 TB.PB, 甚至 EB 来计算,怎么处理庞大的数据集是从事数据库领域人员的共同问题.解决这个问题的核心在于,数据库中存储的数据是否都是有效的.有 ...

  10. python 清空list的几种方法

    本文介绍清空list的四种方法,以及 list=[ ] 和 list.clear() 在使用中的区别(坑). 1.使用clear()方法 lists = [1, 2, 1, 1, 5] lists.c ...