此文章是这个专题的开篇,由于初入 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. Python 迁移学习实用指南 | iBooker·ApacheCN

    原文:Hands-On Transfer Learning with Python 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则& ...

  2. 微服务架构 | 11.1 整合 Seata AT 模式实现分布式事务

    目录 前言 1. Seata 基础知识 1.1 Seata 的 AT 模式 1.2 Seata AT 模式的工作流程 1.3 Seata 服务端的存储模式 1.4 Seata 与 Spring Clo ...

  3. bom-client

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Android数据库的事务

    事务: 执行多条sql语句,要么同时执行成功,要么同时执行失败,不能有的成功,有的失败     银行转账 //点击按钮执行该方法 public void transtation(View v){ // ...

  5. kubeadm部署安装+dashboard+harbor

    kubeadm 部署安装+dashboard+harbor master(2C/4G,cpu核心数要求大于2) 192.168.80.10 docker.kubeadm.kubelet.kubectl ...

  6. Spring Boot-开启第一步

    Spring Boot开发的目的是为了简化Spring应用的开发,使用Spring Boot可以零配置开启一个Spring应用.这得益于Spring Boot中的自动配置组件,如果开发者觉得默认的配置 ...

  7. Note -「Min_25 筛」“你就说这素因子你要不要吧?你要不要?”

      赛上想写,Track Lost 了属于是. \(\mathscr{Intro}\)   Min_25 筛是用于求积性函数前缀和,同时顺带求出一些"有意思"的信息的筛法.   一 ...

  8. CPU优化之平均负载率之辅助工具

    前面介绍了平均负载均衡的一些内容,那实际应用中如何查看,分析性能瓶颈呢?下面介绍相关的辅助工具. 一.stress stress是Linux 系统压力测试工具,其通过异常进程模拟平均负载升高的场景(前 ...

  9. 部署Zabbix 6.0 LTS

    Blog:博客园 个人 本部署文档适用于CentOS 8.X/RHEL 8.X/Anolis OS 8.X/AlmaLinux 8.X. Zabbix 6.0 LTS于2022年2月15日发布,本次大 ...

  10. JVM内存结构的组成、各部分功能作用

    一.程序计数器  作用:是记住下一条jvm指令的执行地址  特点: 是线程私有的 不会存在內存溢出 二.虚拟机栈 每个线程运行时所需要的内存,称为虚拟机栈 每个栈由多个栈帧(Frame) 组成,对应着 ...