📄 parse_file_list.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 + -