解讀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...