王中丹,劉詩楠
(1.遼寧廣播電視大學信息工程學院,沈陽110034;2.廣發銀行股份有限公司沈陽分行,沈陽110000)
Linux應用程序分類與開發方法
王中丹1,劉詩楠2
(1.遼寧廣播電視大學信息工程學院,沈陽110034;2.廣發銀行股份有限公司沈陽分行,沈陽110000)
Linux操作系統以其開放源代碼資源和免費的特性,廣泛應用在各種系統如臺式計算機、大型機和超級計算機中。嵌入式linux是將日益流行的Linux操作系統進行裁剪修改,使之能在嵌入式計算機系統上運行的一種操作系統,廣泛應用在移動電話、個人數字助理(PDA)、媒體播放器、消費性電子產品以及工業控制、航空航天等領域。隨著國內Linux應用的普及和水平的提高,使用Linux或嵌入式Linux作為操作系統,在其上面開發應用程序的越來越多。但是,如何開發Linux應用程序?Linux應用程序有哪些類型?在目前出版的刊物當中很少有這方面的內容,對于初學者來講十分困惑。在此就作者本人在Linux和C語言方面的開發和教學當中的經驗,就Linux程序的開發及編譯、執行等過程,Linux和嵌入式開發的分類等進行一個介紹和說明。
服務器;客戶端;套接字;監控;后臺程序;編譯;可執行文件;進程;嵌入式開發
首先,我們經常講嵌入式開發,那么,什么是嵌入式系統?可能比較難回答,或者回答的不完全。一般來講,嵌入式系統的定義為:嵌入式系統是以應用為中心,以計算機技術為基礎,并且軟硬件可裁剪,適用于應用系統對功能、可靠性、成本、體積、功耗有嚴格要求的專用計算機系統。它一般由嵌入式微處理器、外圍硬件設備、嵌入式操作系統以及用戶應用程序等四個部分組成,用于實現對其他設備的控制、監視或管理等功能[1]。為了區別于原有的通用計算機系統,把嵌入到對象體系中,實現對象體系智能化控制的計算機,稱作嵌入式計算機系統。
從是否使用操作系統來講,可以分為在操作系統上(常見的操作系統包括uClinux、Ubuntu、Fedora、OpenSUSE等)的開發和無操作系統的開發[1],這個分類主要是針對嵌入式開發而言。如以前的51單片機或ARM芯片上的開發,主要是在廠商提供的開發平臺上直接用標準C語言進行編程,編程完畢以后,通過集成平臺進行Debug,最后生成可執行文件[1],然后,將可執行文件直接燒寫到芯片當中。這種開發基本上是在小型儀表或小型控制模塊當中應用的比較多。應用程序規模比較小,功能單一。優點是由于沒有操作系統,系統啟動速度相對有操作系統來講比較快[7]。
另外一種就是將標準Linux中不用的功能進行裁剪,只留下有用的功能,形成一個小操作系統,應用程序在標準Linux操作系統上進行編譯和調試,然后,下載到嵌入式Linux上面進行調試和應用。這種應用程序由于是運行在Linux操作系統上,因此,可以實現更復雜的功能,但仍然主要是應用在工業控制當中。對于大型的應用軟件來講,主要是直接運行在沒有裁剪的操作系統上[1]。
對于嵌入式操作系統來講,由于裁剪了操作系統多余的功能,只保留了需要的功能,因此,這種系統的運行效率非常高,程序需要的資源也不多,是目前嵌入式開發采用的主要方法。但是,這種開發涉及硬件電路的設計制作及Linux操作系統的裁剪,對于這方面的技術要求比較高,需要有嵌入式硬件開發的專業技術人員進行硬件設計,然后,有嵌入式軟件技術人員進行Linux的裁剪,最后,再由普通的C語言開發技術人員進行應用程序開發[1、7]。
上面講到了目前嵌入式開發的主流是在Linux操作系統上的開發,接下來介紹Linux應用程序的分類及開發方法。
(1)普通應用程序[2-3]
如下程序,等待從鍵盤輸入2個自然數,然后,計算出兩個數的平均數,并將結果打印在屏幕上。


如上程序,一般在Window上通過文本編輯器,保存到文件當中sample.c,然后通過ftp工具上傳到Linux服務器上的用戶開發目錄,通過cc編譯器進行編譯,即可生成可執行文件。最后,在命令行執行可執行文件[1]。

該程序執行一次就結束了,這是最普通的Linux程序,通過cc編譯器編譯生成可執行代碼,程序的啟動通過命令行啟動。
(2)帶有界面的應用程序
最典型的就是Linux上面自帶的計算器。當啟動計算器以后,在Linux Desktop畫面上出現一個計算器畫面,在此輸入數據進行計算,然后,顯示出計算結果。如此,反復執行各種計算,只要不關閉畫面,應用程序就一直在執行。這種應用程序的啟動也是需要通過手動方法來啟動。最早的Linux界面程序基本上是用X-Window方法來開發的,現在,主要采用QT來開發[1]。
(3)Linux后臺服務程序
例如用戶自己開發的一些如性能監控程序,當服務器啟動以后,性能監控程序就一直在后臺處于運行狀態。當客戶端連接到服務器以后,服務程序每隔一定時間間隔向客戶端發送一次服務器的性能監控數據,當客戶端斷開連接以后,服務程序就處于等待狀態。每隔一定時間收集一次性能監控數據,但是由于沒有客戶端連接,因此不向客戶端發送數據。其它提供應用服務的程序都稱為服務程序。如我們在百度搜索引擎畫面輸入一個關鍵字,執行搜索,一會兒就會在畫面上顯示好多搜索結果。這其實是畫面向后臺服務器提交一個搜索關鍵詞請求,后臺服務程序通過各種搜索方法執行搜索,然后,將搜索結果和超鏈接發送到前臺,在畫面上顯示出來。我們常見的銀行存取款系統是一個典型的C/S系統,客戶端將賬號和密碼提交給后臺服務器,后臺服務器用賬號和密碼查詢核心數據庫,然后將該賬戶的金額等信息返回到柜臺計算機,在柜臺畫面上顯示,以進行存取款等各種操作[5]。
(4)Linux后臺服務程序的特點
上面介紹了Linux服務程序,那么,Linux后臺服務器程序有哪些特點?程序如何編制和編譯?對于Linux系統服務程序來講,常用的一個概念就是守護進程。這其實是一個典型的系統服務程序,在機器啟動以后自動啟動,并常駐內存,一直提供服務,也不需要手動啟動。這種程序稱為守護進程,比如,ftp、telnet等服務[4]。
守護進程是Linux中的后臺服務進程。它是一個生存期較長的進程,通常獨立于控制終端并且周期性地執行某種任務或等待處理某些發生的事件。守護進程常常在系統引導裝入時啟動,在系統關閉時終止。守護進程的三個最基本的特點是后臺運行、獨立于終端、完成一定的任務。
編程要點如下:
(1)在后臺運行;
(2)脫離控制終端,登錄會話和進程組;
(3)禁止進程重新打開控制終端;
(4)關閉打開的文檔描述符;
(5)改變當前工作目錄;
(6)重設文檔創建掩模;
(7)處理SIGCHLD信號。
如下是一個守護進程實例:
守護進程實例包括兩部分:主程式test.c和初始化程式init.c。主程式每隔一分鐘向/tmp目錄中的日志test.log報告運行狀態;初始化程式中的init_daemon函數負責生成守護進程。讀者能夠利用init_daemon函數生成自己的守護進程[4]。


關于服務程序的編譯,可以采用Linux開發常用的方法進行[6],就是將所有相關聯的文件及使用的庫文件,寫到Makefile當中,通過執行Make命令來將源程序編譯成可執行文件[1]。
將執行文件的自動啟動命令加入到Linux自動啟動腳本文件當中,這樣,當Linux操作系統啟動完畢以后,服務程序會自動啟動[1]。
以上是Linux服務程序的開發步驟,對于嵌入式開發系統來講,編譯命令不能直接使用Linux的gcc或g++來編譯,而要使用對應嵌入式芯片提供的編譯命令進行編譯[8]。編譯好以后,通過ftp命令下載到嵌入式主板,通過命令行賦予給服務程序可執行權限,然后,將啟動命令加入到自動啟動腳本即可。本文只介紹Linux服務程序的分類和嵌入式開發的步驟,具體每一部分的詳細內容,請參照相關資料。
[1] 申華,劉龍,張云翠.嵌入式Linux系統軟硬件開發與應用[M].北京:北京航空航天大學出版社,2013.
Shenhua,Liulong,Zhangyuncui.Development and application of hardware and software for embedded Linux system[M].Beijing:Beihang University Press,2013.
[2] Neil Matthew,Richard Stons,著.Linux程序設計[M].陳健,宋健健,譯.北京:人民郵電出版社,2013.
Neil Matthew,Richard Stons.Beginning Linux Programming 4th Edition[M].Beijing:Posts&telecom Press,2013.
[3] 華清遠見嵌入式培訓中心.嵌入式Linux應用程序開發標準教程[M].北京:人民郵電出版社,2013.
China Huaqingyuanjian embedded training center.Linux application development standards tutorial[M].Beijing:Posts&telecom Press,2013
[4] 宋敬彬,孫海濱.Linux網絡編程[M].北京:清華大學出版社,2010.
Songjingbin,Sunhaibin.Linux network programming[M].Beijing:Tsinghua university press,2010.
[5] 楊宗德.Linux高級程序設計(第2版)[M].北京:人民郵電出版社,2009.Yangzongde.Linux advanced programming[M].Beijing:Posts&telecom Press,2009.
[6] [美]施瓦茲,著.Linux應用程序開發[M].侯普秀,宋美娜,譯.北京:清華大學出版社,2006.
(USA)Carl Albing,(USA)Michael Schwarz.Houpuxiu,Songmeina Translate.Linux Application Development[M].Beijing:Tsinghua university press,2006.
[7] [美]RobertLove,著.Linux內核設計與實現(第3版)[M].陳莉君,康華,譯.北京:機械工業出版社,2011.
(USA)RobertLove.Design and development of Linux kernel[M].Beijing:Cina Machine Press,2011.
[8] 馮國進.Linux驅動程序開發實例[M].北京:機械工業出版社,2011.
Fengguojin.Linux Driver Development instance[M].Beijing:Cina Machine Press,2011.
Classification and Development Method of Linux App lication Software
Wang Zhongdan1,Liu Shinan2
(1.Information and Engineering Department,Liaoning Radio and TVUniversity,Shenyang 110034,China;2.China Guangfa Bank Shenyang Branch,Shenyang 110000,China)
Linux operating system is widely used in various systems such as desktop computers,mainframes and supercomputers because of its open source code and using free.The embedded Linux,as a system running on the embedded computer,ismodified by the popular Linux operating system,which is widely used in Mobile phones,Personal digital assistant(PDA),media player,consumer electronics,industrial control,aerospace and so on.With the popularity of domestic Linux applications and the improvement of the user level,more and more users are using Linux or embedded Linux as the operating system for application development.However,the beginners confuse and want to know how to develop Linux application and what the types of the Linux applications are.Itwould be very confused and puzzled for beginners.There are few relative contents in the journals.According to the experience of development and teaching about Linux and C language,development,compilation and execution process of programs for Linux,the classification of embedded development is described in this paper.
Server;Client;Socket;Monitor;Daemon;Compile;Executable-file;Process;Embedded Development
10.3969/j.issn.1002-2279.2015.06.017
TP3
B
1002-2279(2015)06-0062-03
王中丹(1962-),男,遼寧省錦州市人,副教授/碩士,主研方向:計算機軟件開發。
2015-06-09