資源描述:
《Linux高級(jí)編程實(shí)驗(yàn)實(shí)驗(yàn)4報(bào)告材料.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、電子科技大學(xué)實(shí)驗(yàn)報(bào)告學(xué)生:學(xué)號(hào):指導(dǎo)教師:林實(shí)驗(yàn)地點(diǎn):清水河主樓A2-412實(shí)驗(yàn)時(shí)間:一、實(shí)驗(yàn)室名稱(chēng):Linux環(huán)境高級(jí)編程實(shí)驗(yàn)室二、實(shí)驗(yàn)項(xiàng)目名稱(chēng):插件框架實(shí)驗(yàn)三、實(shí)驗(yàn)學(xué)時(shí):4學(xué)時(shí)四、實(shí)驗(yàn)?zāi)康模簩?shí)踐Linux環(huán)境下插件框架的開(kāi)發(fā)。學(xué)習(xí)并掌握插件的工作原理。五、實(shí)驗(yàn)容:l1、使用動(dòng)態(tài)庫(kù)實(shí)現(xiàn)打印功能開(kāi)發(fā)一個(gè)程序,向屏幕打印“HelloWorld”;在不重新編譯原程序的前提下,將打印的文字改為“HelloChina”。l2、使用動(dòng)態(tài)庫(kù)實(shí)現(xiàn)自定義打印功能同時(shí)要打印“HelloWorld”,打印“Hello
2、China”,甚至同時(shí)打印未來(lái)才會(huì)增加的其他打印信息。打印未來(lái)的這些信息,也不能重新編譯原程序。l3、一次只調(diào)用一種功能通過(guò)命令行方式:./a.outhelp,輸出所有插件實(shí)現(xiàn)的功能ID,以及該功能ID對(duì)應(yīng)的功能描述(參考代碼3)通過(guò)命令行方式:./a.outFuncID,調(diào)用具體打印功能(每個(gè)插件導(dǎo)出GetID接口)(參考代碼4)l4、導(dǎo)出函數(shù)都放在一個(gè)類(lèi)中在版本3中,插件導(dǎo)出了Print、GetID、Help三個(gè)函數(shù),主程序需要使用多個(gè)容器分別保存這些函數(shù)地址。在復(fù)雜的業(yè)務(wù)邏輯中,導(dǎo)出的函數(shù)可
3、能更多,若還按照版本3的方式,代碼維護(hù)性不佳。將三個(gè)導(dǎo)出函數(shù)都放在一個(gè)類(lèi)中,讓插件外部獲取該類(lèi)的對(duì)象六、實(shí)驗(yàn)步驟:版本1程序代碼如圖1.1、圖1.2、圖1.3所示(程序是在Linux圖形界面截取的,本人的Ubuntu在字符界面無(wú)法顯示中文注釋?zhuān)簣D1.1功能函數(shù)圖1.2helloworld函數(shù)圖1.3主函數(shù)首先,使用命令#g++-fpic–shared–ofunction.sohelloworld.cppfunction.cpp將helloworld.cpp和function.cpp編寫(xiě)成動(dòng)態(tài)庫(kù)f
4、unction.so。如圖1.4所示:圖1.4動(dòng)態(tài)庫(kù)的編寫(xiě)然后,再進(jìn)行動(dòng)態(tài)庫(kù)使用者的編譯,命令是#g++-omainmain.cpp–ldl,如圖1.5所示。圖1.5動(dòng)態(tài)庫(kù)使用者圖中顯示了兩次運(yùn)行結(jié)果,但是第一次是helloworld,第二次是hellobaby。這很好地體現(xiàn)的動(dòng)態(tài)的特性。版本2代碼如下:圖2.1main圖2.2helloyanyumin函數(shù)圖2.3helloYANYUMIN函數(shù)該函數(shù)實(shí)現(xiàn)了,同時(shí)要打印“Helloyanyumin”,打印“HelloYANYUMIN”,沒(méi)有重新編譯
5、原程序。運(yùn)行結(jié)果如下圖2.4所示。圖2.4運(yùn)行結(jié)果版本3-2程序代碼如下:圖3.1main.cpp圖3.2function1.cpp圖3.3function.cpp此外,還有CPluginController.cpp和CPluginEnumerator.cpp,里面存放的都是main函數(shù)調(diào)用的子函數(shù),在main里有注釋?zhuān)员悴辉儋樖觥_\(yùn)行結(jié)果如下:圖3.4運(yùn)行過(guò)程與結(jié)果版本4主要程序代碼如下:圖4.1main.cpp圖4.2IPrintPlugin.cpp圖4.3function1.cpp圖4.
6、4function.cpp這種方式采用將三個(gè)導(dǎo)出函數(shù)都放在一個(gè)類(lèi)中,讓插件外部獲取該類(lèi)的對(duì)象。編譯運(yùn)行結(jié)果如下:圖4.5過(guò)程及結(jié)果七、總結(jié)及心得體會(huì):本次實(shí)驗(yàn)主要是學(xué)習(xí)插件的開(kāi)發(fā)和使用,通過(guò)不同的思想對(duì)不同插件進(jìn)行編程,打開(kāi)了我的思維,增加了我對(duì)插件編程的靈活性的掌控。八、對(duì)本實(shí)驗(yàn)過(guò)程及方法、手段的改進(jìn)建議:這次做實(shí)驗(yàn)的過(guò)程有點(diǎn)緊湊,實(shí)驗(yàn)代碼有的部分不是很理解(相關(guān)知識(shí)掌握不清晰),建議老師能在上堂課結(jié)束后提示一下本堂課的主要容,便于我們課后查閱提前準(zhǔn)備??偟膩?lái)說(shuō),收獲很大。報(bào)告評(píng)分:指導(dǎo)教師簽字
7、: