源码简单,makefile文件也简单,核心下面几行: html
all:webbech tags web
webbench.o: webbench.c socket.c Makefile socket
webbench: webbench.o Makefile
$(CC) $(CFLAGS) $(LDFLAGS) -o webbench webbench.o $(LIBS) 函数
编译C的隐含规则:“<n>.o”的目标的依赖目标会自动推导为“<n>.c”,而且其生成命令是“$(CC) –c $(CPPFLAGS) $(CFLAGS)” 工具
实际输出以下:cc -Wall -ggdb -W -O -o webbench webbench.o 测试
结论:webbench就是用一个webbench.c编译生成的,目录下的socket.c只是做为头文件在使用。
ui
webbench属于命令行的工具这种模式的程序,因此无非就是一个getopt()的函数以后根据传入的命令行参数来进行选择。他的主要的思路是这样的:在取得用户的选项以后 spa
(1)调用build_request()函数构造请求报文 命令行
(2)调用bench()函数,bench()主要经过建立一个普通管道,而后根据要模拟的客户数开始fork(),每个子进程都调用一个benchcore()来完成与server的connect()和read()server的response报文。此时父进程经过管道来收集各子进程的链接信息。超时的定时器只是给子进程设定一个退出标志,父进程是等到了全部的子进程都结束以后才会结束,这是用计数器实现的。最后父进程打印出链接中的速度等参数。
orm
看了下这个项目的官网home.tiscali.cz/cz210552/webbench.html彷佛已经不少年没有更新了。
Program: Web Bench
Version: 1.5
Updated: Jun 25 2004
Platform: Posix C
File: webbench-1.5.tar.gz (7675 bytes)
这个程序是有点问题的,由于,根据APUE,显然父进程在结束以前应该要wait每个子进程,不然这些子进程就成为了僵尸进程。这是不该该的,不过做者可能看这个只是一个测试工具因此没有考虑这些问题,也有可能。废话很少说,开始下一个项目。