Chinaunix首页 | 论坛 | 博客
  • 博客访问: 301829
  • 博文数量: 94
  • 博客积分: 2163
  • 博客等级: 大尉
  • 技术积分: 932
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-20 09:23
文章存档

2012年(2)

2011年(92)

分类: LINUX

2011-10-11 18:31:16

 
wget [options] [URL-list]

wget (-; +; :" )  选项  

可以以这些选项开头,这些是决定排序顺序的,排序顺序见前面几个的分析。



  这里说一下,这个argv和argc的应用。
  argc:   整数,为传给main()的命令行参数个数。
  argv:   字符串数组。  argv是char **类型,所以它可以指向任何一个选项的字符或者字符串。而且是依次指向。这就为后面的分析打下了很好的基础。


这只是说到选项,还没有涉及到URL-list。
总结一下前面的周折,给出一个比较宏观的过程:

首先初始化时间,因为时间很重要:),以后会用到的计时器初始化:
  1. struct ptimer *timer = ptimer_new (); /*通过读取映射到系统空间的硬件时钟值来初始化,时钟方面看博客有linux 计时器*/
复制代码
  1. 895   double start_time = ptimer_measure (timer); /*来矫正真正启动的时间如果出现逝去时间(单调时间小于前面的时间值,就重新设置,返回当前的单调时间值(elapsed)作为开始时间,因为准确*/
复制代码
  1.   /*检查本地的字符集, i18n_initialize ();  
  2. 如果并初始化有些需要调用的二进制文件路径(113   setlocale (LC_ALL, "");
  3. 115   bindtextdomain ("wget", LOCALEDIR);
  4. 116   textdomain ("wget");
  5. */
复制代码
  1. 设置程序名称:
  2. 在VMS上要去掉  dev:[dir]前缀和.EXE后缀
  3. exec_name = vms_basename (argv[0]);
  4. argv[0]是本质*/
复制代码
  1. 默认初始化选项的一些属性,如果你在选项中没有设置属性的话,当然不能没有
  2. 917   defaults ();
复制代码
  1. 这 个文件是将cmdline_options类型的option_data[]数组中的所有元素进行分类存放。存放在long_options数组 (option类型,存储long_option的名称,有无参数,它对应的标志(OPT_VALUE等),还有个val记录本身是否在1024内,如果 在外边那么说明,这是带有no-前缀的,(char 类型只存储段选项和参数)short_options数组,还有optmap[]数组将短长选项对应起来。
  2. 919   init_switches ();
复制代码
  1. 后面花费时间最长的就是这个get_long()函数了
  2. 这个函数是选择长选项和短选项进行匹配,
  3. 出现的情况就是找到了,那么在后面看看是否注册if (strcmp (config_opt->long_name, "config") == 0)
  4. 我查了下,只有一个文件的long_name为config,只会检测这个是否注册成功,这涉及到后面的wgetrc文件的注册。 { "config", 0, OPT_VALUE, "chooseconfig", -1 }
  5. 很多程序在后面都会返回一个"?"的ascii码值。ascii码是127应该是个随意值(i think they make it for fun),所以会进行检查。
  6. 其他的都不用管,因为  bool userrc_ret = true;
复制代码
  1. 查找的过程中,如果找到了相似,我指的是long_name相同,但是参数不同,属性不同啦,都会将错误输出stderr来显示错误
  2.    if (pfound->has_arg)
  3. 610                 d->optarg = nameend + 1;
  4. 如果找到了长选项,然后它还有一个参数,那么就用d->optarg来存储选项后面的参数。在后面将用它作为用户写入.wgetrc文件的内容。
复制代码
  1. 935       if (strcmp (config_opt->long_name, "config") == 0)
  2. 936         {
  3. 937           userrc_ret &= run_wgetrc (optarg);
  4. 938           use_userconfig = true;
  5. 939         }
  6. */
复制代码
  1. 530 run_wgetrc (const char *file) 调用
复制代码
  1. 545   while ((line = read_whole_line (fp)) != NULL) /*读取刚写入optarg文件的每一行进行测试*/
  2. 546     {
  3. 547       char *com = NULL, *val = NULL;
  4. 548       int comind;
  5. 549
  6. 550       /* Parse the line.  */
  7. 551       switch (parse_line (line, &com, &val, &comind)) /*对命令所在选项位置进行匹配,匹配成功就是line_ok,出现错误就打印出来。*
复制代码
  1. 950   if (use_userconfig == false)
  2. 951     initialize ();
  3. /*这里是如果没有注册进去,在这里才会将use_userconfig = ture;
  4. 读取环境变量,然后找到此文件,进行写!
复制代码
阅读(906) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~