我先说一下总体流程:wget程序实在是不小,应该是考虑很周密的原因。和其他程序一开始一样,都是要经过初始化的(在/src目录下也有其他的有main()入口,那是测试使用的,一般在上面都有这样类似的预定义:
35 #ifndef TESTING
36 #error "TESTING not set!!!"
37 #endif
)。
初始化:1、包括字符集的初始化;
2、程序一些默认参数的初始化;
3、对所能是使用命令行的初始化;
4、前面的单独的getopt_long是在用户选项之前找到注册文件,并解析;如果没有注册,那么就初始化;
5、后面的get_long是根据用户选项来设置命令,比如一个长选项 accept ,它会在前面加上—accept,然后这里是个解析用分隔符分开的元素,
用n个数组来指向有n-1 ','分隔符的字符串,然活用来分别设置。
6、下面是全部进行对初始化的options进行检查,必要的就设置,出错就打印错误;
7、下面是对sock_init(),因为下面会使用网络,先进行初始化;
8、如果详细监视opt.verbose的话,初始化一些程序起监督作用。
9、后面就是检查采用的什么类型的协议,比如ftp,或者http,然后从新写成http:// xxx. xxx.xxx.xxx格式,并保存在一个url数组里。
10、初始化日志文件。
11、初始化虚拟文件系统作为输出的目的地(如果VMS被定义)
12、设置信号量比如如果定义信号SIGNUP,那么就初始化这个信号函数,这是将输出信息打印到logfile中的重定向。
13、设置url及其接受到文件内容编码格式。
14、将url解析成 路径(path),端口(port),(主机名)(host),请求参数(query)等。
15、检索url地址,并用函数gethostbyname取得servent结构,通过函数retrive_url-> . . .-> gethttp()这里就是网路连接。其他类似。
17、最后选择是装载cookies.
18、打印失败的连接。
19、记录时间,并销毁计时器。
20、最后是清除前面分配东西,如果#ifdef DEBUG_MALLOC
阅读(3339) | 评论(0) | 转发(0) |