tool_main.c文件 - mapleeit/curl_SourceAnalysis GitHub Wiki
tool_main.c文件在/src目录下
其中包含main()
函数,是程序的入口点,我们首先从这里开始
tool_main.c文件中主要的函数:
main_checkfds()
memory_tracking_init()
main_init()
free_config_fields()
main_free()
main()
看源码的时候,将每个文件中的每个函数都好好看一遍可能会丧失主线,所以我们先不管其他函数,直接看main()
函数(另外先忽略函数中的宏条件判断)
int main(int argc, char *argv[])
{
CURLcode result = CURLE_OK;
struct GlobalConfig global;
memset(&global, 0, sizeof(global));
main_checkfds();
memory_tracking_init();
result = main_init(&global);
if(!result) {
result = operate(&global, argc, argv);
main_free(&global);
}
此时会发现main函数非常之简单,我们逐句进行分析:
CURLcode result = CURLE_OK;
这句话定义一个
CURLcode
类型的result
,初始化值为CURLE_OK
。CURLcode
在Curl.h
文件中第125行定义。为一个[枚举类型][1],CURLcode result = CURLE_OK;
->result = 0;
,在这个枚举类型中,除了CURLE_OK还有许多其他整形常量用来定义不同的错误,但是相同点是这些错误都为非零,而OK为零,从而方便进行判断。
struct GlobalConfig global;
GlobalConfig
在Tool_cfgable.h
中第213行定义。
memset(&global, 0, sizeof(global));
[
memset()
][2]
main_checkfds();
目前还不知道这个的作用究竟是什么
memory_tracking_init();
目前还不知道这个的作用究竟是什么
result = main_init(&global);
通过
main_init()
函数对配置文件进行诊断,从而对result赋值,用于接下来对程序状态的判断
if(!result) { result = operate(&global, argc, argv); main_free(&global); }
如果
result == 0
即从上一步判断成功之后,进行下一步操作,这一步将进入关键环节,operate()
函数即将登场,这个函数是整个curl中的核心函数,位于Tool_operate.c
文件之中。
下一节,[operate函数讲解][3] [1]: http://zhidao.baidu.com/link?url=yzIOS4oZg3TD7k42PDV_bOfQXRoZSlHTAbI1nTE4Z62BIS0kcDlj9K8desOrt5USU9GnK92ljXAhJcUGDsy-H_ [2]: http://see.xidian.edu.cn/cpp/html/157.html [3]: https://github.com/mapleeit/curl_SourceAnalysis/wiki/operate()