钻研开源项目——webbench

1 分析Makefile

源码简单,makefile文件也简单,核心下面几行:

all:webbech tags

webbench.o: webbench.c socket.c Makefile

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只是作为头文件在使用。

2 分析源码

webbench属于命令行的工具这种模式的程序,所以无非就是一个getopt()的函数之后根据传入的命令行参数来进行选择。他的主要的思路是这样的:在取得用户的选项之后

(1)调用build_request()函数构造请求报文

(2)调用bench()函数,bench()主要通过创建一个普通管道,然后根据要模拟的客户数开始fork(),每一个子进程都调用一个benchcore()来完成与server的connect()和read()server的response报文。此时父进程通过管道来收集各子进程的连接信息。超时的定时器只是给子进程设定一个退出标志,父进程是等到了所有的子进程都结束之后才会结束,这是用计数器实现的。最后父进程打印出连接中的速度等参数。

3 源码收获与总结

看了下这个项目的官网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每一个子进程,否则这些子进程就成为了僵尸进程。这是不应该的,不过作者可能看这个只是一个测试工具所以没有考虑这些问题,也有可能。废话不多说,开始下一个项目。

转载于:https://my.oschina.net/u/1024767/blog/381053

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值