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_OKCURLcodeCurl.h文件中第125行定义。为一个[枚举类型][1],CURLcode result = CURLE_OK;->result = 0;,在这个枚举类型中,除了CURLE_OK还有许多其他整形常量用来定义不同的错误,但是相同点是这些错误都为非零,而OK为零,从而方便进行判断。

struct GlobalConfig global;

GlobalConfigTool_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()

⚠️ **GitHub.com Fallback** ⚠️