使用開原始碼寫linux程式(轉)
使用開原始碼寫linux程式(轉)[@more@]序linux下程式設計沒有現成的東西都要自己寫,但網上有不少開源作品可以複用,僅以此篇拋轉引玉,也想讓大家互相交流如何有效的使用這些資源,千萬別吝嗇你的經驗。由來小時候很喜歡看卡通漫畫,最近偶然從網上看見許多以前看過的漫畫,donwloading...,但這些漫畫都是放在zip包內,看起來需要解壓縮很不方便,win下有一些直接在zip包內看圖的軟體而且使用方便,可linux下卻很少而且即使有也需要x,一般對像我這樣都直接在控制檯下工作不用 x的人很不方便,為此想寫一個小工具用以解決這個問題。問題這個工具初步階段需要解決的是zip解壓縮和圖片解碼及圖形顯示的問題和程式碼級的平臺無關性。關於zip解壓縮有2個方案:1、使用unzip工具(zipinfo、unzip)現有工具完成2、使用zlib和其包裝庫zziplib圖形相關的則選用SDL和其相關圖片解碼庫SDL_image相關連線:unzip工具 zlib zziplib SDL SDL_image /projects/SDL_imageunzip的使用#define UNZIP "unzip -p -qq -P"#define UNZIP_TEST "unzip -q -t -P"#define ZIPINFO "zipinfo -1"#define SORT "sort -gin"透過以上這些宏對zip檔案進行處理這段程式碼假定當前目錄有一個密碼檔案,而UNZIP_TEST是用於測試密碼檔案內的這些密碼是不是適合當前需要解壓縮的zipUNZIP則是用來解壓縮ZIPINFO是取得zip包內的檔名列表SORT則是把ZIPINFO取得的檔名列表按數字順序排序(如果不能按數字排序就以字母排序)解壓縮程式碼實現了3個供圖片顯示程式碼呼叫的介面:zip_init(zip) 初始化zipzip_getfile(i) 取得zip內第i個檔案zip_free() 釋放zip之所以這麼安排完全是為了解壓縮和顯示分離。tatic ZZIP_DIR *zip_dir;static ZZIP_DIRENT *zip_dirent;static ZZIP_FILE *zip_file;以上3個顧名思意,和平時的程式設計不同的是有了ZZIP字首。和un_zip一樣,這個例程也實現了同樣的3個介面(當然實現是不同的),不過zziplib不支援加密檔案:(,所以這段程式碼不能用於加密的zip。首先用zzip_opendir開啟zip,然後逐個zzip_readdir,由於無法用sort,所以只好用標準c提供的qsort的函式,但要自己寫一個compare函式,這個compare和前面un_zip裡的sort完成同樣功能(忽略路徑,對檔名先按數字比較,再按字母比較) SDL顯示圖片函式showzipimg先初試化sdl環境,然後呼叫zip_init初始化zip檔案並獲得zip內的檔案數量(zip_init的返回值),接著用zip_getfile(i)取得圖片檔案的FILE*,接下來透過IMG_Load_RW(SDL_RWFromFP(tmpimg, 1), 1)呼叫獲得圖片的sdl_surface,接下去就是用SDL_BlitSurface和SDL_UpdateRect畫圖和更新螢幕了跟著的while和switch就是響應事件了空格和左鍵雙擊是顯示下一張圖片,右鍵雙擊是顯示上一張圖片,上,下,左,右及滑鼠拖放是移動圖片Q鍵或關閉視窗(x?)是退出程式(sdl裡沒雙擊事件,用個時間差模擬了一下)mycomicviewer這個是整套的程式,在控制檯下執行需要fb的支援(x下應該可以直接執行),win下也可用,comicsviewer.pwd就是密碼檔案,現在裡面為空,:)main函式很簡單,以後可以為其加如命令列選項(考慮用libpopt)和配置檔案載入(考慮用win的ini或linux的conf,反正這2種檔案都有開源包的支援).雖然用autoconf配過了,但是短時間做的很粗糙,如果不能configure和make,就直接gcc吧(應該自己寫個makefile,懶~,用慣gnu的工具了)對了,這個工具叫mycomicviewer 宣告寫此文並不是想在這裡釋出軟體,而是想透過此文和大家交流一下使用開源包的經驗和技巧,還有就是讓大家少走彎路,讓大家知道有那些方便的庫可以使用,不必再重複開發ps,個人還是很喜歡親自寫一些別人寫過的的程式碼以達到鍛鍊的目的,不過如果是寫應用的話就不必這麼費力氣了,找點有用的包就解決問題
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-944633/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用C語言編寫貪食蛇程式原始碼C語言原始碼
- 求職之手寫程式碼-手寫原始碼大雜燴求職原始碼
- Windows程式設計(第五版)原始碼重寫 (轉)Windows程式設計原始碼
- 寫木馬的經典,dll插入系統程式的原始碼(轉)原始碼
- 編寫適用於模擬器的 Linux 程式碼(轉)Linux
- 開源小程式原始碼原始碼
- Linux 指令碼編寫基礎(轉)Linux指令碼
- 新加坡總理公開多年前寫的數獨程式原始碼原始碼
- Linux 用彩色的vi寫程式(轉)Linux
- Linux下init程式原始碼分析Linux原始碼
- 編寫易讀的程式碼 (轉)
- 程式碼書寫規範(Java) (轉)Java
- Linux系統鼻祖暢談開放原始碼的未來(轉)Linux原始碼
- 原始碼資料庫管理程式 (轉)原始碼資料庫
- 開放原始碼的定義 (轉)原始碼
- Linux再遇能否使用專有程式碼老問題(轉)Linux
- 為Linux 應用程式編寫 DLL(轉)Linux
- Linux網橋原始碼框架分析初步(轉)Linux原始碼框架
- 使用 xunit 編寫測試程式碼
- 使用 intern 編寫測試程式碼
- 使用PHP指令碼來寫Daemon程式PHP指令碼
- 惠普稱:開放原始碼軟體利潤高於專有程式碼(轉)原始碼
- (轉載)編寫高效的jQuery程式碼jQuery
- Django開發——003程式碼編寫Django
- HTML5遊戲開發(二):使用TypeScript編寫程式碼HTML遊戲開發TypeScript
- 併發程式設計之——寫鎖原始碼分析程式設計原始碼
- 手寫Vuex原始碼Vue原始碼
- asp.net 寫一個RMB金額大寫轉換器(原始碼)ASP.NET原始碼
- 開心農場前端程式原始碼前端原始碼
- Linux程式設計:將PHP作為Shell指令碼使用(轉)Linux程式設計PHP指令碼
- 編寫Linux實用程式的藝術(轉)Linux
- Linux網路驅動程式編寫(四)(轉)Linux
- Linux網路驅動程式編寫(三)(轉)Linux
- Linux網路驅動程式編寫(二)(轉)Linux
- Linux網路驅動程式編寫(一)(轉)Linux
- Linux使用原始碼來安裝MySQL 5.7Linux原始碼MySql
- [轉帖]Linux核心原始碼分析分享專題Linux原始碼
- Linux驅動開發筆記(一):helloworld驅動原始碼編寫、makefile編寫以及驅動編譯Linux筆記原始碼編譯