aria2 源码解析专题—— (一)基础架构
阅读原文时间:2023年07月12日阅读:1

此文章是这个专题的开篇,由于初入 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)

暂时没发现这个函数有什么用