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