源碼簡單,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每個子進程,不然這些子進程就成爲了殭屍進程。這是不該該的,不過做者可能看這個只是一個測試工具因此沒有考慮這些問題,也有可能。廢話很少說,開始下一個項目。