对上述png服务器性能测试的程序[3]

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 hustxxb 的 blog

 fd=fileno(fp);

 while((lock_reg(fd,f_setlk,f_wrlck,0,seek_set,0))==-1); /* 给文件加锁 */
 fscanf(fp,"%d\t%d",&a,&b); /* 从文件得到当前数据 */
 if(recvn)
  b+=recvn; /* 如果connect成功,接收数据量累加 */
 else
  a--;  /* connect失败,完成次数减一 */
 rewind(fp);
 fprintf(fp,"%d\t%d",a,b); /* 写入文件 */
 lock_reg(fd,f_setlk,f_unlck,0,seek_set,0);  /* 解锁 */

 fclose(fp);
 return(0);
}

/*-------------------------------------------------------------------*/
/* 使用记录锁对共享文件进行保护 */
int
lock_reg(int fd,int cmd,int type,off_t offset,int whence,off_t len)
{
 struct flock lock;

 lock.l_type=type; /* f_rdlck,f_wrlck,f_unlck */
 lock.l_start=offset; /* byte offset, 起始处的相对偏移量 */
 lock.l_whence=whence; /* seek_set,seek_cur,seek_end */
 lock.l_len=len;  /* 区域的长度(为0表示到最大位置为止) */

 return(fcntl(fd,cmd,&lock)); /* 使用记录锁 */
}

/*--------------------------------------------------------------------*/
/* 输出结果 */
static void
output_results(void)
{
 float takentime;
 file *fp;

 fp=fopen("temp.log","r");
 fscanf(fp,"%d\t%d",&done,&recvdatas); /* 从文件中获取数据 */
 takentime=((float)take_time.tv_sec)+((float)take_time.tv_usec)/1000000.0f; /* 格式化为整数+小数形式 */

 printf("\n\n");
 printf("server hostname: %s\n",hostname);  /* 主机名 */
 printf("server port:  %hd\n",80);   /* 端口 */
 printf("document path:  /%s\n",pathname);  /* 请求路径名 */
 printf("\n");
 printf("total requests:  %d\n",requests);  /* 请求数 */
 printf("concurrency level:      %d\n",concurrency);  /* 并发数 */
 printf("time taken for tests:   %ld.%03ld seconds\n",take_time.tv_sec,take_time.tv_usec); /* 总耗时 */
 printf("complete requests:      %ld\n",done);   /* 完成请求数 */
 printf("failed requests:        %ld\n",(requests-done)); /* 失败请求数 */
 printf("total transferred:      %ld bytes\n",recvdatas); /* 总接收数据量 */
 printf("\n");

 if(takentime){
  printf("requests per second:    %.2f [#/sec] (mean)\n",(float)(done/takentime)); /* 每秒完成请求数 */
  printf("time per request:       %.3f [ms] (mean)\n",(float)(1000*concurrency*takentime/done));/* 完成一个并发请求的时间 */
  printf("time per request:       %.3f [ms] (mean, across all concurrent requests)\n",(float)(1000*takentime/done)); /* 完成一个请求的时间 */
  printf("transfer rate:          %.2f [kbytes/sec] received\n",(float)(recvdatas/takentime/1024)); /* 每秒传输数据量 */
 }
 printf("\n");
}

/*---------------------------------------------------------------------*/
/* 处理子进程sigchld信号 */
static void
sig_chld(int signo)
{
 pid_t pid;
 int stat;

 while((pid=waitpid(-1,&stat,1))>0) /* 处理已结束子进程状态,防止子进程zombie状态出现 */
  lflag--;   /* 标志减一 */

 return;
}

/*---------------------------------------------------------------------*/
/* 提示信息 */
static void
usage(const char *progname)
{
 fprintf(stderr, "usage: %s [options] [http://]hostname/path\n", progname);
 fprintf(stderr, "options are:\n");
 fprintf(stderr, "    -n requests     number of requests to perform\n");
 fprintf(stderr, "    -c concurrency  number of multiple requests to make\n");
 fprintf(stderr, "    -v              print version number and exit\n");
 fprintf(stderr, "    -h              display usage information (this message)\n");
 exit(0);
}

/*----------------------------------------------------------------------*/
/* 出错处理函数 */
static void
err(char *s)
{
 fprintf(stderr, "%s\n", s);
 exit(1);
}

/*----------------------------------------------------------------------*/
/* 版本信息 */
static void
copyright(void)
{
 printf("this is servertest for my pngserver, version 1.0\n");
 printf("copyright (c) 2004-2005 xiongbin xiong  all rights reserved\n");
 printf("hustxxb@hotmail.com\n");

本文关键:对上述png服务器性能测试的程序
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top