資源描述:
《getopt(分析命令行參數(shù))》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、Getopt命令行參數(shù)解析函數(shù)——getopt()getopt()函數(shù)聲明如下:#includeintgetopt(intargc,char*constargv[],constchar*optstring);externchar*optarg;externintoptind,opterr,optopt; 該函數(shù)的argc和argv參數(shù)通常直接從main()的參數(shù)直接傳遞而來。optstring是選項字母組成的字串。如果該字串里的任一字符后面有冒號,那么這個選項就要求有選項參數(shù)?! ‘?dāng)給定getopt()命令參數(shù)的數(shù)量
2、(argc)、指向這些參數(shù)的數(shù)組(argv)和選項字串(optstring)后,getopt()將返回第一個選項,并設(shè)置一些全局變量。使用相同的參數(shù)再次調(diào)用該函數(shù)時,它將返回下一個選項,并設(shè)置相應(yīng)的全局變量。如果不再有可識別的選項,將返回-1,此任務(wù)就完成了?! etopt()所設(shè)置的全局變量包括: char*optarg——當(dāng)前選項參數(shù)字串(如果有)?! ntoptind——argv的當(dāng)前索引值。當(dāng)getopt()在while循環(huán)中使用時,循環(huán)結(jié)束后,剩下的字串視為操作數(shù),在argv[optind]至argv[argc-1]中可以
3、找到?! ntopterr——這個變量非零時,getopt()函數(shù)為“無效選項”和“缺少參數(shù)選項,并輸出其錯誤信息?! ntoptopt——當(dāng)發(fā)現(xiàn)無效選項字符之時,getopt()函數(shù)或返回'?'字符,或返回':'字符,并且optopt包含了所發(fā)現(xiàn)的無效選項字符?!∫韵旅娴某绦驗槔骸 ∵x項: -n——顯示“我的名字”?! ?g——顯示“我女朋友的名字”?! ?l——帶參數(shù)的選項. 清單2: #include #include intmain(intargc,char**argv) {
4、 intoc;????????????????????/*選項字符*/ char*b_opt_arg;???????????/*選項參數(shù)字串*/ while((oc=getopt(argc,argv,"ngl:"))!=-1) { switch(oc) { case'n': printf("MynameisLyong."); break; case'g': printf("HernameisXxiong."); break; case'l': b_opt_arg=optarg; printf("Our
5、loveis%s",optarg); break; } } return0; } 運(yùn)行結(jié)果: $./opt_parse_demo-n MynameisLyong. $./opt_parse_demo-g HernameisXxiong. $./opt_parse_demo-lforever Ourloveisforever $./opt_parse_demo-nglforever MynameisLyong. HernameisXxiong. Ourloveisforever 6、改變getopt()
6、對錯誤命令行參數(shù)信息的輸出行為 不正確的調(diào)用程序在所難免,這種錯誤要么是命令行選項無效,要么是缺少選項參數(shù)。正常情況下,getopt()會為這兩種情況輸出自己的出錯信息,并且返回'?'。為了驗證此事,可以修改一下上面的清單2中的代碼?! ∏鍐?: #include #include intmain(intargc,char**argv) { intoc;????????????????????/*選項字符*/ char*b_opt_arg;???????????/*選項參數(shù)字串*/ w
7、hile((oc=getopt(argc,argv,"ngl:"))!=-1) { switch(oc) { case'n': printf("MynameisLyong."); break; case'g': printf("HernameisXxiong."); break; case'l': b_opt_arg=optarg; printf("Ourloveis%s",optarg); break; case'?': printf("argumentserror!"); break;
8、 } } return0; } 輸入一個錯誤的命令行,結(jié)果如下: $./opt_parse_demo-l ./opt_parse_demo:optionrequiresanargu