webbench原始碼學習

2021-07-03 01:47:55 字數 1481 閱讀 4062

解讀getopt_long()

static const struct option long_options=,,

,,,,

,,,,

,,,,

};while((opt=getopt_long(argc,argv,"912vfrt:p:c:?h",long_options,&options_index))!=eof )

if(tmp==optarg)

if(tmp==optarg+strlen(optarg)-1)

*tmp='\0';/*':'->'\o'這樣proxyhost就只能取到前面部分*/

proxyport=atoi(tmp+1);break;

case ':':

case 'h':

case '?': usage();return 2;break;

case 'c': clients=atoi(optarg);break;}}

getopt被用來解析命令列選項引數。

getopt_long支援長選項的命令列解析,使用man getopt_long,得到其宣告如下:

int getopt_long(int argc, char * const argv,const char *optstring, const struct option *longopts,int *longindex);

函式中的argc和argv通常直接從main()的兩個

引數傳遞而來。optsting是選項引數組成的字串:

字串optstring可以下列元素:

1.單個字元,表示選項,

2.單個字元後接乙個冒號:表示該選項後必須跟乙個引數。引數緊跟在選項後或者以空格隔開。該引數的指標賦給optarg。

3 單個字元後跟兩個冒號,表示該選項後可以有引數也可以沒有引數。如果有引數,引數必須緊跟在選項後不能以空格隔開。該引數的指標賦給optarg。(這個特性是gnu的擴張)。

optstring是乙個字串,表示可以接受的引數。例如,"a:b:cd",表示可以接受的引數是a,b,c,d,其中,a和b引數後面跟有更多的引數值。(例如:-a host -b name)

引數longopts,其實是乙個結構的例項:

struct option ,會自動將method 指向method_trace

int val; //和flag聯合決定返回值

}引數longindex,表示當前長引數在longopts中的索引值。

可參考迴圈建立子程序

/* fork childs */

for(i=0;i  pid=fork();

if(pid <= (pid_t) 0)

if( pid< (pid_t) 0)

//子程序任然會保持從父程序繼承來的i的值

if(pid== (pid_t) 0)

{讓父程序一直迴圈fork()建立子程序,建立出來的子程序跳出迴圈不參與後續for()

Web Bench 原始碼學習

web bench是乙個開源的,用c語言寫成的測試伺服器或 的乙個工具 通過fork 來測試,量不大,絕對是乙個學習的教材 但是沒有更新了,估計也很少人用這個,最新的是2004年的1.5版本,不過也不失為乙個好的學習專案 介紹中說,這個測試不是很真實,但起碼可以模擬伺服器的效能 檔案結構 makef...

webbench原始碼分析

根據提供的引數構造http請求的訊息頭,然後fork出n個子程序 也就是webbench時候提供的引數 c n 每個子程序根據根據引數 t提供的時間,持續這麼多秒,這這麼長的時間內利用socket建立乙個tcp連線到我們想要的 頁面。然後每個程序統計自己再這個時間內取得了多少頁面和多少資料,然後由父...

原始碼學習 ArrayList的擴容原始碼分析

原始碼如下 下面是arraylist的擴容機制 arraylist的擴容機制提高了效能,如果每次只擴充乙個,那麼頻繁的插入會導致頻繁的拷貝,降低效能,而arraylist的擴容機制避免了這種情況。如有必要,增加此arraylist例項的容量,以確保它至少能容納元素的數量 param mincapac...