0X00 函數(shù)的作用
用來(lái)解析既有選項(xiàng)又有參數(shù)的命令行,很多著名的程序都會(huì)采用這種結(jié)構(gòu)和switch case語(yǔ)句來(lái)組織其主函數(shù)裁着,例如tcpdump。
0X01函數(shù)的原型
int getopt(int argc,char* const argv[],const char* optstring)
與之相關(guān)的幾個(gè)全局變量
extern char* optarg
extern int optind,opterr,optopt
其中argc argv 為命令行參數(shù)拱她,optstring指明能夠解析的選項(xiàng)(abc:de表示能夠解析abcde這幾個(gè)選項(xiàng)二驰,c選項(xiàng)后有參數(shù))
返回值為函數(shù)識(shí)別的當(dāng)前選項(xiàng),-1表示無(wú)更多選項(xiàng)秉沼,桶雀?表示未標(biāo)識(shí)的選項(xiàng),:表示未給出參數(shù)
optarg會(huì)被系統(tǒng)自動(dòng)賦為當(dāng)前選項(xiàng)的參數(shù)
optopt會(huì)被自動(dòng)賦值當(dāng)前未標(biāo)識(shí)的選項(xiàng)
optind為處理參數(shù)的位置
opterr在非0時(shí)唬复,向屏幕輸出錯(cuò)誤矗积。
這幾個(gè)全局變量非常重要,老師說(shuō)是因?yàn)榕聟?shù)太多嚇到使用者才選擇使用了全局變量
0X02getopt_long
函數(shù)原型
int getopt_long(int argc, char * const argv[],const char *optstring,const struct option *longopts, int*longindex);
有一些函數(shù)的選項(xiàng)為--list等等敞咧,這就需要getopt_long 來(lái)處理
其原理與getopt類似棘捣,只不過(guò)加了一個(gè)長(zhǎng)選項(xiàng)與短選項(xiàng)的一個(gè)對(duì)應(yīng)表,是一個(gè)結(jié)構(gòu)體數(shù)組休建,其中結(jié)構(gòu)體成員有name:長(zhǎng)選項(xiàng)名稱乍恐,has_arg:又參維0無(wú)參為1,flag=null時(shí)value存儲(chǔ)相應(yīng)的短選項(xiàng)longindex我感覺(jué)一般情況都設(shè)為了null丰包。