排序:
默认
按更新时间
按访问量

libcurl实现解析(3) - libcurl对select的使用

1.前言 在本系列的前一篇文章中,介绍了libcurl对poll()的使用。参考"libcurl原理解析(2) - libcurl对poll的使用"。 本篇文章主要分析curl_poll()中对select()的封装使用。与前一篇类似,我们只分离出与select相关的代码。 2...

2015-07-13 22:26:45

阅读数:2007

评论数:0

libcurl实现解析(2) - libcurl对poll的使用

libcurl同时封装了select以及poll这两种I/O机制。代码中使用宏HAVE_POLL_FINE对这两者进行分离。如果定义了这个宏,则使用poll,否则使用select。 这两者的使用代码都定义在函数curl_poll()中,而函数定义在文件lib/select.c中。为了方便分析,阅读...

2015-07-13 17:42:29

阅读数:2726

评论数:0

libcurl实现解析(1) - 引言

1.引言 在爱立信最近参与的项目是一个数据转发程序,采用http协议。主要使用到了epoll与libcurl这两种技术。本人负责的是里边的传输模块,也是项目的主要模块。刚好使用到了libcurl这个库,并且用它与epoll进行结合。所以基本上从开始的架构设计,到开发,到性能调试,bug fix,基...

2015-07-13 00:51:26

阅读数:3595

评论数:0

C&C++函数指针

今天在阅读libcurl的源码的时候,发现里边定义函数指针的方法,与平时自己所用方式有所不同。详细分析了一下。 libcurl的代码中,定义了一组发送数据的函数指针。如下所示: //代码目录: lib/urldata.h struct connectdata { ...... Curl_send ...

2015-07-12 16:45:46

阅读数:668

评论数:0

红黑树(3) - 删除操作

在本系列的前面两篇文章中,已经介绍了红黑树以及其插入操作。具体可参考下面两个链接: 红黑树(1) - 介绍 红黑树(2) - 插入操作 1.删除操作介绍 类似于插入操作,红黑树进行删除节点时,也使用重新着色以及旋转这两种方式,来维护它的属性。在插入操作中,我们主要是依靠检测叔节点的颜色来决定哪种...

2015-07-11 22:30:29

阅读数:677

评论数:0

红黑树(2) - 插入操作

1.插入介绍 首先以二叉排序树的方法增加节点并标记它为红色。(为何不是红色?因为如果设为黑色,就会导致根到叶子的所有路径中,有一条路径上会多出一个额外的黑节点,这个是很难调整的)。但是,设为红色节点后,可能会导致出现两个连续红色节点的冲突,则可以通过重新着色和旋转来调整。具体的调整操作取决于其他临...

2015-07-09 00:56:17

阅读数:953

评论数:0

红黑树(1) - 介绍

1.红黑树性质 红黑树是一种自平衡二叉查找树(BST),其中的每个节点都遵守下面的规则: 性质1. 节点是红色或黑色 性质2. 根节点是黑色 性质3. 所有叶子都是黑色(叶子是NIL节点) 性质4. 如果一个节点是红的,则它的两个儿子都是黑的。 (即不可能存在相邻的连个红色节点。红色节点不能有红色...

2015-07-08 00:42:21

阅读数:1176

评论数:1

C++对象内存分布(3) - 菱形继承(virtual)

1.前言 本篇文章的所有代码例子,如果是windows上编译运行,则使用的是visual studio 2013。如果是RHEL6.5平台(linux kernal: 2.6.32-431.el6.i686)上编译运行,则其gcc版本为4.4.7,如下所示: [root@MiWiFi-R1CM ~...

2015-06-27 09:08:10

阅读数:1050

评论数:0

C++对象内存分布(2) - 菱形继承(non virtual)

1.前言 本篇文章的所有代码例子,如果是windows上编译运行,则使用的是visual studio 2013。如果是RHEL6.5平台(linux kernal: 2.6.32-431.el6.i686)上编译运行,则其gcc版本为4.4.7,如下所示: [root@MiWiFi-R1CM ~...

2015-06-26 22:12:28

阅读数:785

评论数:0

C++对象内存分布(1) - 私有虚函数

1.前言 本篇文章的所有代码例子,如果是windows上编译运行,则使用的是visual studio 2013。如果是RHEL6.5平台(linux kernal: 2.6.32-431.el6.i686)上编译运行,则其gcc版本为4.4.7,如下所示: [root@MiWiFi-R1CM ~...

2015-06-25 23:17:12

阅读数:981

评论数:0

进程间通信(11) - 网络套接字(socket)[2]

1.前言 本篇文章的所有例子,基于RHEL6.5平台(linux kernal: 2.6.32-431.el6.i686)。 在前一篇文章中(点此链接),已经介绍了socket(),bind(),listen(),connect(),accept()这些函数。 至此,服务器与客户机已经建立好了连接...

2015-06-22 20:51:39

阅读数:1612

评论数:0

进程间通信(10) - 网络套接字(socket)[1]

1.前言 本篇文章的所有例子,基于RHEL6.5平台(linux kernal: 2.6.32-431.el6.i686)。 2.网络中进程间通信 本地的进程间通信(IPC)方式有很多种,总结起来,大概可以分为下面的这4类:   a).消息传递。包括管道(点此链接),FIFO(点此链接),消息队列...

2015-06-22 13:02:07

阅读数:2011

评论数:0

进程间通信(9) - 共享内存(System V)

1.前言 本篇文章的所有例子,基于RHEL6.5平台(linux kernal: 2.6.32-431.el6.i686)。 2.介绍 共享内存也是一种IPC,它是目前最快的IPC,它的使用方式是将同一个内存区映射到共享它的不同进程的地址空间中,这样这些进程间的通信就不再需要通过内核,只需对该共享...

2015-06-22 00:47:25

阅读数:1419

评论数:1

进程间通信(8) - 共享内存(posix)

1.前言 本篇文章的所有例子,基于RHEL6.5平台(linux kernal: 2.6.32-431.el6.i686)。 2.共享内存介绍 前面所讲述的Linux下面的各种进程间通信方式,例如:pipe(管道),FIFO(命名管道),message queue(消息队列),它们的共同点都是通过...

2015-06-19 23:59:01

阅读数:2031

评论数:0

进程间通信(7) - 消息队列(System V)

1.前言 本篇文章的所有例子,基于RHEL6.5平台(linux kernal: 2.6.32-431.el6.i686)。 2.介绍 System V消息队列是Open Group定义的XSI,不属于POSIX标准。System V IPC的历史相对很早,在上个世70年代后期有贝尔实验室的分支机...

2015-06-18 22:32:26

阅读数:1294

评论数:0

进程间通信(6) - 消息队列(posix)

1.前言 本篇文章的所有例子,基于RHEL6.5平台(linux kernal: 2.6.32-431.el6.i686)。 2.介绍 消息队列是先进先出FIFO原则。 消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向其中按照一定的...

2015-06-17 22:30:58

阅读数:1195

评论数:0

进程间通信(5) - 命名管道(FIFO)

1. 前言 本篇文章的所有例子,基于RHEL6.5平台。前一篇文章介绍了匿名管道。点此链接。 2.介绍 管道应用的一个重大限制是它没有名字,因此,只能用于具有亲缘关系的进程间通信,在有名管道(named pipe或FIFO)提出后,该限制得到了克服。FIFO不同于管道之处在于它提供一个路径名与之关...

2015-06-17 00:26:18

阅读数:2559

评论数:0

进程间通信(4) - 管道(pipe)

1. 前言   本篇文章的所有例子,基于RHEL6.5平台。本篇只介绍管道(匿名管道/普通管道),命名管道在后续文章中会介绍。 2.管道特性 管道是Linux支持的最初Unix IPC形式之一,具有以下特点:   --管道是半双工的,数据只能向一个方向流动,一端输入,另一端输出。需要双方通信...

2015-06-16 23:24:46

阅读数:4467

评论数:1

进程间通信(3) - 信号量

1. 前言 本文章中所有例子,基于rhel6.5。 2.信号量 信号量是一种用于提供不同进程间或一个进程间的不同线程间进行同步手段的原语,System V信号量在内核中维护。 二值信号量:其值只有0、1 两种选择,0表示资源被锁,1表示资源可用; 计数信号量:其值在0 和某个限定值之间,不限定资...

2015-06-16 21:28:06

阅读数:871

评论数:0

二叉查找树(6) - 最近公共祖先LCA

给定二叉查找树中的两个节点,求它们的最近公共祖先(Lowest Common Ancestor - LCA)。 在详细介绍之前,可以先参考下这篇文章"二叉树(70) - 最近公共祖先[1]" 函数原型定义如下: Node *getLCA(Node* root, in...

2015-06-16 00:31:18

阅读数:2409

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭