WEB开发网
开发学院网络安全黑客技术 如何阅读源代码(3) 阅读

如何阅读源代码(3)

 2006-07-04 20:27:47 来源:WEB开发网   
核心提示: 如果在命令行中指定了忽略历史文件,则不读取历史文件,如何阅读源代码(3)(3),否则调用get_history()来读取历史数据,在这里,并将它的数据包括到这次的分析中去,不信,我们可以回想在README文件中同样说过这一细节,在命令行或者配置文件中都能指定这一开关

如果在命令行中指定了忽略历史文件,则不读取历史文件,否则调用get_history()来读取历史数据。在这里,我们可以回想在README文件中同样说过这一细节,在命令行或者配置文件中都能指定这一开关。需要说明的是,我们在这里并不一定需要去看get_history这一函数,因为从函数的名称,README文件和程序注释都能很清楚的得知这一函数的功能,不一定要去看代码。而如果要猜想的话,也可以想到,history是webalizer在上次运行的时候记录下来的一个文件,而这个文件则是去读取它,并将它的数据包括到这次的分析中去。不信,我们可以来看看。
void get_history()
{
  int i,numfields;
  FILE *hist_fp;
  char buffer[BUFSIZE];
/* first initalize internal array */
  for (i=0;i<12;i++)
  {
  hist_month[i]=hist_year[i]=hist_fday[i]=hist_lday[i]=0;
  hist_hit[i]=hist_files[i]=hist_site[i]=hist_page[i]=hist_visit[i]=0;
  hist_xfer[i]=0.0;
  }
hist_fp=fopen(hist_fname,"r");
if (hist_fp)
  {
  if (verbose>1) printf("%s %s ",msg_get_hist,hist_fname);
  while ((fgets(buffer,BUFSIZE,hist_fp)) != NULL)
  {
   i = atoi(buffer) -1;
   if (i>11)
   {
    if (verbose)
     fprintf(stderr,"%s (mth=%d) ",msg_bad_hist,i+1);
    continue;
   }
/* month# year# requests files sites xfer firstday lastday */
   numfields = sscanf(buffer,"%d %d %lu %lu %lu %lf %d %d %lu %lu",
       &hist_month[i],
       &hist_year[i],
       &hist_hit[i],
       &hist_files[i],
       &hist_site[i],
       &hist_xfer[i],
       &hist_fday[i],
       &hist_lday[i],
       &hist_page[i],
       &hist_visit[i]);
if (numfields==8) /* kludge for reading 1.20.xx history files */
   {
    hist_page[i] = 0;
    hist_visit[i] = 0;
   }
  }
  fclose(hist_fp);
  }
  else if (verbose>1) printf("%s ",msg_no_hist);
}
/*********************************************/
/* PUT_HISTORY - write out history file */
/*********************************************/
void put_history()
{
  int i;
  FILE *hist_fp;
hist_fp = fopen(hist_fname,"w");
if (hist_fp)
  {
  if (verbose>1) printf("%s ",msg_put_hist);
  for (i=0;i<12;i++)
  {
   if ((hist_month[i] != 0) && (hist_hit[i] != 0))
   {
    fprintf(hist_fp,"%d %d %lu %lu %lu %.0f %d %d %lu %lu ",
        hist_month[i],
        hist_year[i],
        hist_hit[i],
        hist_files[i],
        hist_site[i],
        hist_xfer[i],
        hist_fday[i],
        hist_lday[i],
        hist_page[i],
        hist_visit[i]);
   }
  }
  fclose(hist_fp);
  }
  else
  if (verbose)
  fprintf(stderr,"%s %s ",msg_hist_err,hist_fname);
}

上一页  1 2 3 4  下一页

Tags:如何 阅读 源代码

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接