使用 getopt() 進(jìn)行命令行處理

使用 getopt() 進(jìn)行命令行處理

ID:21980028

大小:75.00 KB

頁數(shù):8頁

時間:2018-10-26

使用 getopt() 進(jìn)行命令行處理_第1頁
使用 getopt() 進(jìn)行命令行處理_第2頁
使用 getopt() 進(jìn)行命令行處理_第3頁
使用 getopt() 進(jìn)行命令行處理_第4頁
使用 getopt() 進(jìn)行命令行處理_第5頁
資源描述:

《使用 getopt() 進(jìn)行命令行處理》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、使用getopt()進(jìn)行命令行處理  本文示例源代碼或素材下載  引言  在早期的UNIX®中,其命令行環(huán)境(當(dāng)時的唯一用戶界面)包含著數(shù)十種小的文本處理工具。這些工具非常小,通??珊芎玫赝瓿梢豁椆ぷ鳌_@些工具通過較長的命令管道鏈接在一起,前面的程序?qū)⑵漭敵鰝鬟f給下一個程序以作為輸入,整個過程由各種命令行選項和參數(shù)加以控制?! ≌荱NIX的這方面的特征使其成為了極為強大的處理基于本文的數(shù)據(jù)的環(huán)境,而這也是其在公司環(huán)境中的最初用途之一。在命令管道的一端輸入一些文本,然后在另一端檢索經(jīng)過處理的輸出?! ∶?/p>

2、令行選項和參數(shù)控制UNIX程序,告知它們?nèi)绾蝿幼鳌W鳛殚_發(fā)人員,您要負(fù)責(zé)從傳遞給您程序的main()函數(shù)的命令行發(fā)現(xiàn)用戶的意圖。本文將演示如何使用標(biāo)準(zhǔn)getopt()和getopt_long()函數(shù)來簡化命令行處理工作,并討論了一項用于跟蹤命令行選項的技術(shù)?! ¢_始之前  本文包含的示例代碼(請參見下載)是使用C開發(fā)工具(CDevelopmentTooling,CDT)在Eclipse3.1中編寫的;getopt_demo和getopt_long_demo項目是ManagedMake項目,均使用CDT的程序生成

3、規(guī)則構(gòu)建。在項目中沒有包含Makefile,如果需要在Eclipse外編譯代碼,可以自己方便地生成一個。  如果尚未嘗試過Eclipse(請參閱參考資料),真的應(yīng)該嘗試一下這是一個優(yōu)秀的集成開發(fā)環(huán)境(integrateddevelopmentenvironment,IDE),其每個新版本都有較大的提升。這是來自強硬派EMACS和Makefile開發(fā)人員的作品?! ∶钚小 ≡诰帉懶鲁绦驎r,首先遇到的障礙之一就是如何處理控制其行為的命令行參數(shù)。這包括從命令行傳遞給您程序的main()函數(shù)的一個整數(shù)計數(shù)(通常名為a

4、rgc)和一個指向字符串的指針數(shù)組(通常名為argv).可以采用兩種實質(zhì)一樣的方式聲明標(biāo)注main()函數(shù),如清單1中所示?! ∏鍐?.聲明main()函數(shù)的兩種方式intmain(intargc,char*argv[]);intmain(intargc,char**argv);  第一種方式使用的是指向char指針數(shù)組,現(xiàn)在似乎很流行這種方式,比第二種方式(其指針指向多個指向char的指針)略微清楚一些。由于某些原因,我使用第二種方式的時間更多一些,這可能源于我在高中時艱難學(xué)習(xí)C指針的經(jīng)歷。對于所有的用途和目

5、的,這兩種方法都是一樣的,因此可以使用其中您自己最喜歡的方式?! ‘?dāng)C運行時庫的程序啟動代碼調(diào)用您的main()時,已經(jīng)對命令行進(jìn)行了處理。argc參數(shù)包含參數(shù)的計數(shù)值,而argv包含指向這些參數(shù)的指針數(shù)組。對于C運行時庫,arguments是程序的名稱,程序名后的任何內(nèi)容都應(yīng)該使用空格加以分隔?! ±纾绻褂脜?shù)-vbar.ibm.運行一個名為foo程序,您的argc將設(shè)置為4,argv的設(shè)置情況將如清單2中所示?! ∏鍐?.argv的內(nèi)容argv[0]-fooargv[1]--vargv[2]-bara

6、rgv[3]-.ibm.  一個程序僅有一組命令行參數(shù),因此我要將此信息存儲在記錄選項和設(shè)置的全局結(jié)構(gòu)中。對程序有意義的要跟蹤的任何內(nèi)容都可以記錄到此結(jié)構(gòu)中,我將使用結(jié)構(gòu)來幫助減少全局變量的數(shù)量。正如我在網(wǎng)絡(luò)服務(wù)設(shè)計文章(請參閱參考資料)所提到的,全局變量非常不適合用于線程化編程中,因此要謹(jǐn)慎使用。  示例代碼將演示一個假想的2html程序的命令行處理。該2html程序?qū)⒛撤N類型的文檔轉(zhuǎn)換為HTML,具體由用戶指定的命令行選項控制。它支持以下選項:  -I不創(chuàng)建關(guān)鍵字索引?! ?llang轉(zhuǎn)換為使用語言代碼la

7、ng指定的語言?! ?ooutfile.html將經(jīng)過轉(zhuǎn)換的文檔寫入到outfile.html,而不是打印到標(biāo)準(zhǔn)輸出。  -v進(jìn)行轉(zhuǎn)換時提供詳細(xì)信息;可以多次指定,以提高診斷級別?! ⑹褂闷渌募Q來作為輸入文檔?! ∧€將支持-h和-?,以打印幫助消息來提示各個選項的用途?! 『唵蚊钚刑幚恚篻etopt()  getopt()函數(shù)位于unistd.h系統(tǒng)頭文件中,其原型如清單3中所示:  清單3.getopt()原型intgetopt(intargc,char*constargv[],constchar

8、*optstring);  給定了命令參數(shù)的數(shù)量(argc)、指向這些參數(shù)的數(shù)組(argv)和選項字符串(optstring)后,getopt()將返回第一個選項,并設(shè)置一些全局變量。使用相同的參數(shù)再次調(diào)用該函數(shù)時,它將返回下一個選項,并設(shè)置相應(yīng)的全局變量。如果不再有識別到的選項,將返回-1,此任務(wù)就完成了?! etopt()所設(shè)置的全局變量包括:  optarg指向當(dāng)前選項參數(shù)(如

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。