zoukankan      html  css  js  c++  java
  • axel源码学习(1)——重要流程细节

    前面一篇文章的流程太过于简单,基本没有触及到axel的核心,因此本文将要把axel中的几个重要的主要的操作流程单独弄出来看看,还是按照main函数的执行顺序来展开,略去错误处理之类的流程仅仅着眼于最重要的内容。

    命令参数解析

    命令参数解析的源码用switch-case语句实现非常清晰明了,只要对照axel的用法很容易看懂,因此这里不再详细分析了。

    search

    前面说过,axel支持搜索镜像站点,从多个地址下载同一个文件,如果使用了[-S]选项的话将进行search的操作。

    image

    图 1.1 search mirror 过程

    如图 1.1所示的search过程简图,如果命令行传入-S x参数,便执行search mirror过程,搜索的核心是search_makelist()函数,这个函数将调用conn.c中的相关连接操作,获取mirror的列表并存储。然后将调用search_getspeeds函数测试各个mirror的速度,search_sortlist将其排序,最后在创建axel数据结构时(也就是准备下载)传入的地址参数是这个search的结果列表。如果没有要求search过程的话,传入的地址url将是用户在命令行参数输入的url。

    创建axel_t structure

    在后面介绍axel的主要数据结构的时候会提到,实际上axel下载的主体是axel_t结构体,因此在下载之前都会创建这个结构体并对其进行一些相关操作。axel_new()函数传入三个参数,根据参数来设置axel_t结构体,程序流程很简单,关键是要理解操作的意义,这就需要了解axel_t结构体的成员情况,在这儿先不展开。

    axel_start

    在准备工作都做好了之后,便要真正准备下载了,要将网络上的文件下载下来,需要在本地打开一个文件然后向文件写入下载的数据,这个过程由函数axel_open完成。axel_open()函数中调用了axel_divide()函数来为每一个连接分割文件位置,这个就是axel支持多连接的实现细节。整个之前的过程完成之后,axel_start开始下载,但是实际上axel_start中并没有真正在下载,axel_start只是rescan了url、创建了线程及记录开始时间。

    axel_do

    axel下载的重头戏axel_do来了,它所完成的是下载过程的主要工作。

    image

    图 1.2 axel_do 的大致流程

    axel_do函数中使用了select函数来等待各个连接上的数据,select函数将在另一篇文章中介绍。

  • 相关阅读:
    送给有缘的人,2007年9月20日可买入股票
    上次9.19推荐的兰太实业停牌的公告,有持有的朋友可查看
    送给有缘的人,2007年9月24日可买入股票
    对古越龙山的惆怅
    将PDA矢量图控件开源
    读取PE文件的导入表
    [非原创] 用于将真彩色图像降级为索引图像的八叉树算法
    读取PE文件的资源表
    [VC6] 图像文件格式数据查看器
    关于 AlphaBlend 和 32bpp 的反锯齿图标
  • 原文地址:https://www.cnblogs.com/jaletech/p/3390688.html
Copyright © 2011-2022 走看看