主题函数和流程

到今天基本上把所有的主题函数和流程搞清楚了,先把所有的文件列表和功能贴一下,回头再分析数据结构程序的核心算法。赫赫。

axel就很少几个文件:
  1. ls *.h *.c
  2. axel.c  conf.c  config.h  conn.h  ftp.h   http.h    search.h  tcp.h
  3. axel.h  conf.h  conn.c    ftp.c   http.c  search.c  tcp.c     text.c
复制代码
下面,结合每组文件的功能,对其中的函数进行说明。这样方便对代码的整体进行框架性的了解


axel.h
axel.c 


axel中把每个用于下载的连接抽象为一个axel_t的结构体,因此下载的所有操作
都是围绕这个数据结构展开的。
  1. axel_t *axel_new( conf_t *conf, int count, void *url )
复制代码
根据conf中的内容,为每个下载连接创建一个axel_t数据结构
在这个函数中,其实已经为每个连接创建好连接,并且获取到
要下载的文件信息了。
  1. int axel_open( axel_t *axel )
复制代码
创建本地的存储文件,并且为多连接下载切割文件,初始化每个连接写文件
的偏移位置
  1. void axel_start( axel_t *axel )
复制代码
开始下载,这个函数中为每个连接创建一个线程,这个线程只用于连接ftp或者http
服务器,而不做数据下载,因为Axel是用主线程select做下载的。其中
setup_thread 函数是连接线程的函数体.
  1. void axel_do( axel_t *axel )
复制代码
下载主体函数:

在循环中进行如下操作,把新连接上的socket加入到集合中,使用select读取集合中所有连接
接收到的文件数据,写入连接对应的文件中。
如果有坏连接,超时的话,放弃该连接,下载失败,否则重新尝试该下载的连接建立。
  1. void axel_close( axel_t *axel )
复制代码
关闭该Axel中的连接,删除状态文件,释放内存
  1. static void axel_divide( axel_t *axel )
复制代码
切分axel要存储的目标文件,主要是计算每个连接下载时的开始偏移,下载量

你可能感兴趣的:(主题函数和流程)