此文章是这个专题的开篇,由于初入 C++ 的大门,所以想着拿个项目来看看,凑巧有点基础,又想学习一下在unix上的编程,所以就找了 aria2 这个库来看看源码,希望能学到一些东西。

言归正传,今天把源码下载下来,直接检出了它的第一版源码,我打算从头看起。检出源码之后,我将它的代码性质大致分为 6 个模块,如下图所示。

这六个模块分别是:

  1. Commad 目前来看,应该是命令行接口,因为 aria2 是一个命令行应用程序,所以需要这个东西
  2. Exception 这个是它自己实现的异常类
  3. Logger 这个是它自己实现的日志类
  4. IO 这个模块主要操纵本地文件与网络流的交互
  5. Net 故名思意,这个模块主要定义网络协议
  6. Util 杂类,放一些公共的东西

由于是第一版程序,为了方便起见,先从依赖少的文件入手,譬如 Util 模块。

Util 模块下只有两部分:

  • message.h

    这个文件下包含一些宏定义,这些宏定义对应一些需要使用的字符串信息,除此之外,别无他物

  • Util.h 以及 Util.cpp

    这两个文件主要就定义了一个 Util 类,这个类主要是操纵字符串自实现。顺便一提,正因为只是一些工具性质的函数,所以就直接定义成静态类了。


主要分析一下函数的作用以及重要的实现方式,其他的一笔带过。

函数 作用
difftv(timeval,timeval) 返回两个时间片段相差的毫秒数
itos(int,bool) 同下
llitos(long long int,bool) 整形数转对应的字符串,感觉这个算法还比较有用
slice(vector<string>&,string,char) 以某一个字符拆分字符串,拆到最小单元
split(par<string,string>&,string,char) 以某一个字符拆分字符串,只拆分一次
trim(string) 暂时没发现这个函数有什么用

aria2 源码解析专题—— (一)基础架构的更多相关文章

  1. aria2 源码解析专题 —— (二) Exception 部分

    首先声明 Exception 部分的几个异常类的继承关系,如下: 这一版的 Exception 部分只有头文件,没有源文件,所以涉及到的更多的只是定义而已,没有太多实现,所以这一部分也简单说说每个类的 ...

  2. 【vuejs深入二】vue源码解析之一,基础源码结构和htmlParse解析器

    写在前面 一个好的架构需要经过血与火的历练,一个好的工程师需要经过无数项目的摧残. vuejs是一个优秀的前端mvvm框架,它的易用性和渐进式的理念可以使每一个前端开发人员感到舒服,感到easy.它内 ...

  3. 【大数据】深入源码解析Map Reduce的架构

    这几天学习了MapReduce,我参照资料,自己又画了两张MapReduce的架构图. 这里我根据架构图以及对应的源码,来解释一次分布式MapReduce的计算到底是怎么工作的. ​话不多说,开始! ...

  4. 【雷神源码解析】无基础看懂AAC码流解析,看不懂你打我

    一 前言 最近在尝试学习一些视频相关的知识,随便一搜才知道原来国内有雷神这么一个真正神级的人物存在,尤其是在这里(传送门)看到他的感言更是对他膜拜不已,雷神这种无私奉献的精神应当被我辈发扬光大.那写这 ...

  5. Spring源码解析--Spring的整体架构

    概述 Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.Spring是于2003 年兴起的一个轻量级的Java 开发框 ...

  6. Kafka Producer源码解析一:整体架构

    一.Producer整体架构 Kafka Producer端的架构整体也是一个生产者-消费者模式 Producer线程调用send时,只是将数据序列化后放入对应TopicPartition的Deque ...

  7. dubbo源码解析五 --- 集群容错架构设计与原理分析

    欢迎来我的 Star Followers 后期后继续更新Dubbo别的文章 Dubbo 源码分析系列之一环境搭建 博客园 Dubbo 入门之二 --- 项目结构解析 博客园 Dubbo 源码分析系列之 ...

  8. 【vuejs深入三】vue源码解析之二 htmlParse解析器的实现

    写在前面 一个好的架构需要经过血与火的历练,一个好的工程师需要经过无数项目的摧残. 昨天博主分析了一下在vue中,最为基础核心的api,parse函数,它的作用是将vue的模板字符串转换成ast,从而 ...

  9. dubbo源码解析-spi(一)

    前言 虽然标题是dubbo源码解析,但是本篇并不会出现dubbo的源码,本篇和之前的dubbo源码解析-简单原理.与spring融合一样,为dubbo源码解析专题的知识预热篇. 插播面试题 你是否了解 ...

随机推荐

  1. HTML Flex 布局

    感谢原文作者:在路上de 小白 原文链接:https://www.cnblogs.com/likun123/p/9518466.html#commentform 目录 一.Flex 布局是什么? 二. ...

  2. C语言中的typedef跟define的区别

    今天用C语言练习时涉及到了typedef和define的使用问题,那么他们的区别是啥?这种情况下为什么要用typedef?哪种情况下为什么要用define呢? 学习C的时候的你是否考虑过这个问题呢? ...

  3. Math 数学类

    /* Math 数学类, 主要是提供了很多的数学公式. abs(double a) 获取绝对值 ceil(double a) 向上取整 floor(double a) 向下取整 round(float ...

  4. 内部类&异常

    /* 内部类 内部类类别: 成员内部类: 在一个类的成员位置定义另外一个类,那么另外 一个 类就称作为成员内部类. 成员内部类的访问方式: 方式1: 在外部类内提供一个方法创建内部类的对象进行访问. ...

  5. iOS 模糊、精确搜索匹配功能方法总结 By HL

    字符串搜索主要用于UITableView的搜索功能的筛选,过滤,查询 下面是一些流行的搜索查询方法 一.遍历搜索 for循环 根据要求:精确搜索(判读字符串相等)   模糊搜索(字符串包含) 相关知识 ...

  6. k8s补充

    k8s补充 容器云发展及主要内容 1.云计算,交付标准(iaas--openstack) 国内:阿里云一华为云(振兴杯)百度云(私有云) 国外:AWS 2.平台即服务(PAAS) 例如:新浪云(号称免 ...

  7. Python--操作列表

    Python--操作列表 目录 Python--操作列表 一.遍历整个列表 1. 深入研究循环 2. 在for循环中执行更多操作 3. 在for循环结束后执行一些操作 二.避免缩进错误 1. 忘记缩进 ...

  8. 计算机网络再次整理————tcp周边[八]

    前言 tcp的包的格式可以看我以前的计算机网络整理,下面这些周边只是为了开发时候我们能用到一些理论知识. 正文 首先要介绍的就是域名,为啥有域名这东西呢?单纯站在网络的角度上讲这属于应用层的东西了. ...

  9. YOLOv5模型训练及检测

    一.为什么使用YOLOv5 二.软件工具 2.1 Anaconda https://www.anaconda.com/products/individual 2.2 PyCharm https://w ...

  10. 矩阵QR分解

    1 orthonormal 向量与 Orthogonal 矩阵 orthonormal 向量定义为 ,任意向量  相互垂直,且模长为1: 如果将  orthonormal 向量按列组织成矩阵,矩阵为  ...