⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parse_file_list.c

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 C
字号:
/* parse_file_list.c,v 1.2 2000/06/04 22:00:03 brunsch Exp *//************************************************************************** *									  * * 		 Copyright (C) 1995 Silicon Graphics, Inc.		  * *									  * *  These coded instructions, statements, and computer programs were	  * *  developed by SGI for public use.  If any changes are made to this code* *  please try to get the changes back to the author.  Feel free to make  * *  modifications and changes to the code and release it.		  * *									  * **************************************************************************/#include <stdio.h>#include <errno.h>#include <signal.h>#include <stdlib.h>#include <string.h>#ifndef WIN32#include <netdb.h>#include <sys/param.h>#endif /* WIN32 */#include <sys/types.h>#ifndef WIN32#include <sys/ipc.h>#include <sys/shm.h>#include <sys/errno.h>#include <sys/socket.h>#include <sys/time.h>#include <netinet/in.h>#else#include <windows.h>#include <process.h>#include <time.h>#include <winsock.h>#endif /* WIN32 */#include <ctype.h>#include "sysdep.h"#include "bench.h"/*  * count_file_list() * given a filename, return a guess at the number of pages */intcount_file_list(const char *url_list_file){  FILE 	*fp;  long int num_of_pages;  char 	   a_line[BUFSIZ];  char     *textvalue;  int      returnval;  fp = fopen(url_list_file, "r");    if (fp == NULL)    {      D_PRINTF( "Error %d opening filelist %s: %s\n", 		       errno, url_list_file, strerror(errno) );;      return(returnerr("Error %d opening filelist %s: %s\n", 		       errno, url_list_file, strerror(errno)));    }  else    {      num_of_pages = 0;      D_PRINTF( "Opened file, about to count\n" );      /*       * parse through the file line-by-line        * strip out comments, but don't check for URL consistency       */      while (fgets(a_line, BUFSIZ, fp) != NULL)	{	  textvalue = a_line;	  /* check for comments */	  if (strchr(textvalue, '#') != NULL)	    {	      /* throw out anything after any '#' */	      D_PRINTF( "Stripping comment from line: %s\n", textvalue );	      returnval = strcspn(textvalue, "#");	      D_PRINTF( "Found first # at %d\n", returnval );	      if (returnval == 0) 		{		  textvalue = NULL;		}	    }	  /* is there more? */	  if (textvalue != NULL) 	    {	      num_of_pages++;	      D_PRINTF( "Found %ld pages\n", num_of_pages );	    }	}      return(num_of_pages);    }  fclose(fp);} /* end count_file_list() *//*  * parse_file_list() * given a filename, a pointer to a page list, and pointers to integers * for the number of pages and the number of files, parse its contents. */voidparse_file_list (const char *url_list_file, page_list_t *page_list, 		 long int *num_of_pages, long int *num_of_files){  FILE 	*fp;  int         filenum;  int         returnval;  int         loadnum;  char 	      a_line[BUFSIZ];  char        tempbuf[BUFSIZ];  char        *textvalue;  int	      numfiles = 1, numpages = 0;  int	      maxpages = *num_of_pages;  page_list_t	*pp;  extern int haveproxyserver;  fp = fopen(url_list_file, "r");    if (fp == NULL)    {      errexit("Error %d opening filelist: %s\n", errno, strerror(errno));    }  else    {      /*        * GRAB A LINE. FORMAT IS: URL WEIGHTINGFACTOR        * EXAMPLE: http://www/file.html 1       */      D_PRINTF( "File is open.\n" );      while(fgets(a_line, BUFSIZ, fp) != NULL)	{	  textvalue = a_line;	  /* check for comments */	  if (strchr(textvalue, '#') != NULL)	    {	      /* throw out anything after a '#' */	      D_PRINTF( "Stripping comment from line: %s\n", textvalue );	      returnval = strcspn(textvalue, "#");	      D_PRINTF( "Found first # at %d\n", returnval );	      if (returnval == 0) 		continue;	    }	  if (numpages >= *num_of_pages)	    errexit("Out of space in parse_file_list()\n");	  pp = &page_list[numpages];	  D_PRINTF( "Processing page %ld\n", numpages );	  loadnum = 0;	  if (textvalue != NULL) { /* is there more? */	    /* check for weighting factor */	    D_PRINTF( "Setting page values from: %s\n", textvalue );	    returnval = sscanf(textvalue, "%s%d", tempbuf, &loadnum);	    D_PRINTF( "Scan for weighting returns %d, %d\n",	      returnval, loadnum );	    if (returnval == EOF || loadnum <= 0)	      {		pp->load_num = 1;	      }	    else	      {		pp->load_num = loadnum;	      }	    D_PRINTF( "Setting load=%d for line: %s\n", 	      pp->load_num, textvalue );	    /* placeholder for grouping multiple files onto one page */	    pp->num_of_files = 1;	    filenum = 0;	    textvalue = tempbuf;	    D_PRINTF( "Line is now: %s\n", textvalue );	    /* 	     * if we've got a proxy server, we'll assume that the	     * remaining text is a valid URL, and stuff it into	     * page_list[numpages].filename[filenum]	     * Otherwise, we'll have to parse it out.	     */	    if (haveproxyserver)	      {		pp->servername[filenum] = NULL;		pp->port_number[filenum] = 0;		strcpy(pp->filename[filenum], textvalue);	      }	    else /* no proxy server, so we have to parse it out... */	      {		/* try http://server(:port)/file */		D_PRINTF( "Trying http://server(:port)/filename\n" );		returnval = sscanf(textvalue, "http://%[^/]%s",  				   tempbuf,				   a_line);		/* check server string for :port */		if (returnval != 0 && returnval != EOF) 		  {		    D_PRINTF( "Setting filename %s\n", a_line );		    strcpy(pp->filename[filenum], 			   a_line);		    		    D_PRINTF( "Checking %s for :portnumber\n", tempbuf );		    returnval = sscanf(tempbuf, "%[^:]:%d",				       a_line,				       &pp->port_number[filenum]);				    if (returnval < 2)		      {			pp->port_number[filenum] = 80;		      }		    if (returnval == EOF)		      {			pp->servername[filenum] = NULL;		      }		    else		      {			D_PRINTF( "Port number %d, setting server %s\n",			  pp->port_number[filenum],			  a_line );						strcpy(pp->servername[filenum], a_line);		      }		    D_PRINTF( "Server %s, port number %d\n", 		      pp->servername[filenum],		      pp->port_number[filenum] );		  }		else /* no good - try straight filename */		  {		    pp->port_number[filenum] = 80;		    D_PRINTF( "Trying filename, returnval=%d\n", 		      returnval );		    pp->servername[filenum] = NULL;		    D_PRINTF( "Server %s, port number %d\n", 		      pp->servername[filenum],		      pp->port_number[filenum] );		    returnval = sscanf(textvalue, "%s", a_line);		    D_PRINTF( "Scan returned filename %s\n", a_line );		    strcpy(pp->filename[filenum], a_line);		  } /* end of parsing */	      } /* end if haveproxyserver */	    D_PRINTF( "Done parsing line\n" );	    D_PRINTF( "Got server %s, port %d, file %s, returnval %d\n",	      pp->servername[filenum],	      pp->port_number[filenum],	      pp->filename[filenum],	      returnval );	  } /* end if textvalue not NULL */	  numpages++;	} /* end while not EOF */      if (numpages < 1)	{	  returnerr("No files are specified by filelist\n");	}    } /* end if file ok */    fclose(fp);    D_PRINTF( "Returning %ld pages and %ld files\n",       numpages, numfiles );    *num_of_pages = numpages;    *num_of_files = numfiles;}/* end parse_file_list */long intload_percent(page_list_t *page_list, long int number_of_pages){  int i;  long int index_number = 0;  for (i = 0; i < number_of_pages; i++)    {          index_number += page_list[i].load_num;    }    D_PRINTF( "load_percent returning %d\n", (index_number) );  return(index_number);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -