- 博客(15)
- 资源 (3)
- 收藏
- 关注
原创 Libevent源码学习(四) 事件内部流程解析下部
上一节过后,大家应该对于事件状态转换有了一定的了解,具体的代码部分也已经详细分析到了事件状态转换为EVLIST_INSERTED状态.下面接着上面的部分接着说明. 1.事件链表 上节提到过很多次链表这么个东西,具体libevent怎么实现链表,大家可以参考compat/sys/queue.h文件.这里把常用的链表定义操作有详细的代码,基本上全部使用宏的形式去实现函数,应该是为了更高效的运行,有
2015-10-31 10:59:48 696
原创 Libevent源码学习(三) 事件内部流程解析上部
上一节简单的介绍了事件的概念,这节就实际利用libevent的代码与上节最后说到的几个问题进行详细说明.为了简单来考虑,这里不先不考虑超时事件与信号事件,只进行读写事件的解释. 1.事件的定义 事件是libevent一个非常重要的概念,先来看看它的数据结构定义.代码位于event.h文件中 struct event { TAILQ_ENTRY (event) ev_next; TAILQ
2015-10-27 15:59:30 483
原创 Libevent源码学习(二) 事件的概念
上一节结合代码解释了一下如何libevent可以支持多种不同网络模型,并且屏蔽不同模型之间的区别.其中也涉及到了一个很重要的概念:事件.这里给大家详细解释一下事件的概念. 事件是可以被控件识别的操作,如按下确定按钮,选择某个单选按钮或者复选框。每一种控件有自己可以识别的事件,如窗体的加载、单击、双击等事件,编辑框(文本框)的文本改变事件,等等。 上面的解释是抄录百度百科的翻
2015-10-27 09:21:35 577
原创 Libevent源码学习(一) 支持多种网络模型原理
在linux下学习了一段时间网络编程,主体的编程思路懂得差不多了(windows下做过,基本差不多),所以决定看些开源的库来实际学习一下.故选择了相对简练的libevent进行代码阅读.在读的过程中,参考了一位已经将libevent解析的很清楚的大神的博客.http://blog.csdn.net/sparkliang/article/details/4957667 这里算是自己学习过程中的一些
2015-10-21 21:52:17 779
原创 利用ffmpeg修改的音频图片提取接口
由于实验室是做图像与视频处理的,所以基本上是利用OpenCV开源库。OpenCV库非常方便,也很好用。但是其底层提供的视频接口不是很多,主要是提取视频帧,后续的都变成图像处理的工作了。在做算是自己的论文方向题目的时候,需要用到音频特征(提取的特征越多,识别的效果应该会有所提升),这时候OpenCV就不行了。由于OpenCV底层的图像和视频接口都是也是使用ffmpeg处理,不过用于比较少而已。所以就
2015-10-06 20:04:14 1415
转载 HTTP协议及工作原理解析
超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议。HTTP 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到请求后,给予相应的响应信息。 HTTP 请求报文 HTTP 请求报文由请求行、请求头部、空行 和 请求包体 4 个部分组成,如下图所示: 下面对请求报文格式进行简单
2015-10-21 21:02:42 525
转载 IO多路复用 epoll模型
1、基本知识 epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。 2、epoll接口 epoll操作过程需要三个接口,分别如下:
2015-10-20 21:44:27 331
转载 IO多路复用 Select模型
1、基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。 (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用
2015-10-20 21:04:14 353
转载 堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两
2015-10-20 09:36:03 312
转载 socket阻塞与非阻塞,同步与异步、I/O模型
原作写的很好,把这几个知识点做了一个系统详细的解释。顶一个! 原作链接:http://blog.csdn.net/hguisu/article/details/7453390 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步: 所谓同步,就是在发出
2015-10-08 16:46:02 356
原创 libevent安装编译并测试
由于之前在windows平台下接触过一个网络数据过滤的程序,当时也是第一次写关于网络方面的程序(之前写的小程序不算),明显的经验不足。很多知识都不够用,最后导致这个程序没有完成。但是过程中学到了不少的东西,多线程,队列,锁机制,缓冲区管理等等。还有各种网络模型,包括典型的轮询方式,多路复用select以及windows下的IOCP等。 这段时间在看关于linux下面的编程,算是为找工作做准备吧,
2015-10-08 16:14:27 1055
原创 linux常用小命令
1.查看特定端口使用情况,并删除该占用进程 查看: netstat -nlp | grep 端口号 删除:kill -9 进程pid 示例: netstat -nlp | grep 25341 查看25341端口情况 结果:(Not all processes could be identified, non-owned process info will not
2015-10-08 09:31:07 480
转载 GCC 命令行详解 -L 指定库的路径 -l 指定需连接的库名
1. 为什么会出现undefined reference to 'xxxxx'错误? 首先这是链接错误,不是编译错误,也就是说如果只有这个错误,说明你的程序源码本身没有问题,是你用编译器编译时参数用得不对,你没有指定链接程序要用到得库,比如你的程序里用到了一些数学函数,那么你就要在编译参数里指定程序要链接数学库,方法是在编译命令行里加入-lm。 2. -l参数和-L参数 -l参数就是
2015-10-08 09:23:50 479
转载 linux下查看和添加PATH环境变量
linux下查看和添加PATH环境变量 来自:http://apps.hi.baidu.com/share/detail/32942984 $PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接。 编辑你的 PATH 声明,其格式为: PATH=$PATH::::------:
2015-10-07 20:48:39 341
转载 gdb使用方法
推荐 GDB十分钟教程 这个我看见的对于gdb使用方法清晰明了的博客了,这里只提供网址就行了。 网址:http://blog.csdn.net/liigo/article/details/582231
2015-10-07 13:54:18 436
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人