上一期说了initdb的大概流程和初期准备,这一期说一说参数解析
首先看一下initdb的入口,main函数
main(int argc, char *argv[])
这里有两个参数,argc和argv[]
argc: 命令行总的参数个数
argv[]:保存命令行参数的字符串指针,其中argv[0]参数是程序的全名
假设我在命令行输入initdb -D pgdata
argc=3
argv[0]=“F:\postgresql-9.6.10\bin\bin\initdb.exe”
argv[1]=“-D“
argv[2]=“pgdata”
首先要解析的是调用程序的实际名称
progname = get_progname(argv[0]);
const char *
get_progname(const char *argv0)
{
const char *nodir_name;
char *progname;
//这里从F:\postgresql-9.6.10\bin\bin\initdb.exe得到initdb.exe
nodir_name = last_dir_separator(argv0);
if (nodir_name)
nodir_name++;
else
nodir_name = skip_drive(argv0);
/*
* Make a copy in case argv[0] is modified by ps_status. Leaks memory, but
* called only once.
*/
progname = strdup(nodir_name);
if (progname == NULL)
{
fprintf(stderr, "%s: out of memory\n