选项部分终于要结束了
分析initialize();
- {
- 591 {
- 592 char *file, *env_sysrc;
- 593 bool ok = true;
- 601 #ifdef SYSTEM_WGETRC
- 602 else if (file_exists_p (SYSTEM_WGETRC)) /* 1、________------>判断文件是否存在,如果存在,就去读取里面内容作判断*/
- 603 ok &= run_wgetrc (SYSTEM_WGETRC);
- 604 #endif
- 607 if (! ok)
- 608 {
- 609 fprintf (stderr, _()); /*打印出错误*/
- 615 file = wgetrc_file_name (); /*这里是如果存在,就从新写2、________---------->*/
- 629 ok &= run_wgetrc (file);
复制代码- 1、________------------->
- 538 file_exists_p (const char *filename)
- 539 {
- 540 #ifdef HAVE_ACCESS
- 541 return access (filename, F_OK) >= 0; /*如果已经访问过了,就判断是否还在这个是系统调用
- */
- 542 #else
- 543 struct_stat buf;
- 544 return stat (filename, &buf) >= 0; /*这个是读取文件状态*/
- 545 #endif
- 546 }
复制代码-
- 2、___________--------->
- 478 char *
- 479 wgetrc_file_name (void)
- 480 {
- 481 char *file = wgetrc_env_file_name (); 3、_____----->/*根据环境变量WGETRC获得文件*/
- 482 if (file && *file)
- 483 return file;
- 484
- 485 file = wgetrc_user_file_name (); /*4、_____----->这里是检查~home/.wgetrc文件,如果有就返回此路径*/
复制代码- 3、_________________------>
- 428 char *
- 429 wgetrc_env_file_name (void)
- 430 {
- 431 char *env = getenv ("WGETRC"); /* env是指向此环境变量的指针 ,我理解的就是目录*/
- 432 if (env && *env)
- 433 {
- 434 if (!file_exists_p (env)) /*如果有WGETRC存在,但是文件却不存在,那么就直接退出*/
- 435 {
- 436 fprintf (stderr, _("%s: WGETRC points to %s, which does't exist.\n"),
- 437 exec_name, env);
- 438 exit (1);
- 439 }
- 440 return xstrdup (env); /*如果文件存在,就在此env地址从写环境变量的值*/
- 441 }
- 442 return NULL; /*如果没有此环境变量,或者指向的字符串是NULL。那么返回NULL。
- 443 }
复制代码4、______________----------->
- 447 char *
- 448 wgetrc_user_file_name (void)
- 449 {
- 450 char *home;
- 451 char *file = NULL;
- 452 /* If that failed, try $HOME/.wgetrc (or equivalent). */
- 453
- 454 #ifdef __VMS /*vms格式下的路径名*/
- 455 file = "SYS$LOGIN:.wgetrc";
- 456 #else /* def __VMS */
- 457 home = home_dir (); /*这是获得home的环境变量值*/
- 458 if (home)
- 459 file = aprintf ("%s/.wgetrc", home); /*一种打印方式。*/
- 460 xfree_null (home);
- 461 #endif /* def __VMS [else] */
- 462
- 463 if (!file)
- 464 return NULL;
- 465 if (!file_exists_p (file))
- 466 {
- 467 xfree (file);
- 468 return NULL;
- 469 }
- 470 return file; /*返回文件名*/
- 471 }
- 472
复制代码<-----------________________
- 从initialize()返回,又是刚才的根据用户输入进行初始化*/
- while ((ret = getopt_long (argc, argv, short_options, long_options, &longindex)) != -1)
- 965 if (longindex == -1) /*如果此值没有变只有找到一个相匹配的长选项才会改变此longindex的值。如果返回?这个字符说明说明长选项或者 没有参数 短选项不为:*/
- 966 {
- 967 if (ret == '?') /*此时返回为?那么就--help*/
- 968 {
- 969 print_usage (0);
- 970 printf ("\n");
- 971 printf (_("Try `%s --help' for more options.\n"), exec_name );
- 972 exit (2);
- 973 }
- 974 /* Find the short option character in the mapping. */
- 975 longindex = optmap[ret - 32]; /*找到 /*找到相应的长选项*/
- 976 }
- 977 val = long_options[longindex].val; /*根据检索到longindex来获得val的值*/
- 982 opt = &option_data[val & ~BOOLEAN_NEG_MARKER]; /*获得那个option_data数组中对应元素*/
- 983 switch (opt->type) /*根据cmdline_option类型,用optarg来设置相应修改opt->data*/
- 984 {
- 985 case OPT_VALUE:
- 986 setoptval (opt->data, optarg, opt->long_name); 5、________------->
- 987 break;
- 988 case OPT_BOOLEAN:
- 989 if (optarg)
- . . . . .
- }
复制代码- 5、____________------------->
- 781 void
- 782 setoptval (const char *com, const char *val, const char *optname)
- 783 {
- 784 /* Prepend "--" to OPTNAME. */
- 785 char *dd_optname = (char *) alloca (2 + strlen (optname) + 1); /*设置成--optname*/
- 786 dd_optname[0] = '-';
- 787 dd_optname[1] = '-';
- 788 strcpy (dd_optname + 2, optname);
- 789
- 790 assert (val != NULL);
- 791 if (!setval_internal (command_by_name (com), dd_optname, val)) 检查是否有命令错误,或者参数,并且最后一步是运行此命令*/
- 792 exit (2);
- 793 }
- 7、______------------->
- 733 setval_internal (int comind, const char *com, const char *val)
- 734 {
- 735 assert (0 <= comind && ((size_t) comind) < countof (commands));
- 736 DEBUGP (("Setting %s (%s) to %s\n", com, commands[comind].name, val));
- 737 return commands[comind].action (com, val, commands[comind].place); /*最后一步是运行命令*/
- 738 }
- 例如:这里是com是 accept,commands[comind].place 这里是 &opt.accepts, val是参数*/
复制代码- 调用的是rpl
- 29 #undef accept
- 32 rpl_accept (int fd, struct sockaddr *addr, socklen_t *addrlen)
- 33 {
- 34 SOCKET fh = accept (FD_TO_SOCKET (fd), addr, addrlen); /*这是接受网络请求的函数系统调用来了!*/
- 35 if (fh == INVALID_SOCKET) /*在linux下是不可能失败的*/
- 36 {
- 37 set_winsock_errno (); /*如果是无效的sock文件,那么就返回-1。*/
- 38 return -1;
- 39 }
- 40 else
- 41 return SOCKET_TO_FD (fh); /*否则就将改变文件的属性,*/
- 42 }
- 29 #define SOCKET_TO_FD(fh) (_open_osfhandle ((long) (fh), O_RDWR | O_BINAR Y))
- /*这里是windows系统调用函数*/
阅读(1458) | 评论(0) | 转发(0) |