比特币源码研读(10)-main函数

上文我们设置了网络配置参数和比特币的网络链路参数,接下来我们继续看看,下面将发生什么。

命令行错误提示

// Error out when loose non-argument tokensare encountered on command line

for (int i = 1; i< argc; i++) {

    if(!IsSwitchChar(argv[i][0])) {

    fprintf(stderr, "Error: Command linecontains unexpected token '%s', see bitcoind -h for a        list of options.\n",argv[i]);

     exit(EXIT_FAILURE);

     }

}

从注释我们可以看出该段代码主要的意思是对输入的命令做判断,如果不是合法的命令,则报错。

其中,函数IsSwitchChar定义在util.h中。函数实现如下:

inline bool IsSwitchChar(char c)

{

       #ifdef WIN32

           return c == '-'|| c == '/';

     #else

          return c == '-';

       #endif

}

函数很简单,就是看命令中有没有“-”或者“/”,如果有,则返true,不提示错误,如果没有,则返回false,提示错误。例如,如果我们在命令行输入test,则提示错误如下:

2.  服务器参数设置

// -server defaultsto true for bitcoind but not for the GUI so do this here

gArgs.SoftSetBoolArg("-server", true);

从注释我们可以看出,服务器的默认参数是true,bitcoind端,不算GUI端。

SoftSetBoolArg函数在util.cpp中,其代码实现如下:

bool ArgsManager::SoftSetBoolArg(const std::string&strArg, bool fValue)

{

    if (fValue)

       returnSoftSetArg(strArg, std::string("1"));

  else

       returnSoftSetArg(strArg, std::string("0"));

}

函数说明:如果存在serve函数,则无需设置,如果不存在,则根据SoftSetBoolArg传入的fValue值进行相应的设置。

3.[ 初始化日志

// Set this early so that parameter interactions go toconsole

InitLogging();

InitLogging函数在init.cpp文件中,这是日志打印内容基础框架设置部分,在该部分主要对日志打印的内容根据参数进行解析,确定后续运行过程中需打印的信息,其具体实现代码也很简单,其实现函数函数如下

void InitLogging()

{

           fPrintToConsole =gArgs.GetBoolArg("-printtoconsole", false);

           fLogTimestamps =gArgs.GetBoolArg("-logtimestamps", DEFAULT_LOGTIMESTAMPS);

           fLogTimeMicros =gArgs.GetBoolArg("-logtimemicros", DEFAULT_LOGTIMEMICROS);

           fLogIPs =gArgs.GetBoolArg("-logips", DEFAULT_LOGIPS);

           LogPrintf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");

           LogPrintf("Bitcoin version %s\n", FormatFullVersion());

}

1)Printtoconsole:

日志信息是否发送跟踪/调试信息到控制台而不是debug.log文件。我们看到其默认为false,即不打印至控制台或终端上,反之则打印。

2)logtimestamps

时间戳,该参数的含义为在日志中打印时间戳,该参数的默认值定义为静态常量DEFAULT_LOGTIMESTAMPS,该常量在src/util.h中定义。默认打印时间戳。其定义如下:

static const bool DEFAULT_LOGTIMEMICROS = false;

static const bool DEFAULT_LOGIPS= false;

static const bool DEFAULT_LOGTIMESTAMPS = true;

3)logtimemicros

日志打印中,日志时间是否按微妙格式打印。该参数的默认值定义为静态常量DEFAULT_LOGTIMEMICROS。默认是false,不按微秒格式打印

4)logips

日志是否打印IP地址,从上面定义看,是默认不打印的。

至此,打印日志的信息就分析完了。


区块链研习社比特币源码研读班  electroman

以下是广告:

我们区块链研习社已创建“区块链研习社币圈交流”小密圈”,在小密圈中,我们将带领大家一起学习区块链的原理与投资,还将提供区块链基本原理解答、交易所注册与交易操作、ICO交易与操作、投资分析、风险分析等内容。

比特币源码研读(10)-main函数_第1张图片

你可能感兴趣的:(比特币源码研读(10)-main函数)