Linux程序設計殿堂的善意提醒
Linux操作系統除了安全、穩定,深受系統管理員喜愛外,還有一個深受大家歡迎的原因就是其是開源的。只要系統管理員有這個能力,就可以在操作系統原有的功能上開發所需要的功能。所以說,如果不了解在Linux操作系統下如何編程,那么這個系統管理員只能說是半個系統管理員。剛好前不久有個朋友他想走Linux程序設計這條道路,問我該怎么走?筆者今天就這個機會,對想走這條道路的朋友做一些善意的提醒。
一、要注意與C語言的差異。
在Linux操作系統下實現程序開發,包括嵌入式開發在內,基本上采用的都是C語言開發結構。但是這里需要注意的是,Linux系統下采用的C語言跟其他的C語言有很大的不同。特別是那些在學校里學過C語言,或者以前有C語言開發經歷的,現在要轉到Linux系統功能的開發,就需要特別注意這個問題。如下面是一個在Linux系統下開發的一個簡單的屏幕歡迎界面的源代碼。
int main (int argc,char** argv)
printf(“Welcome!Linux!\n);
return 0;
各位仔細看看這個main函數,跟傳統的C語言中的main函數有什么區別嗎?從格式上看其來好像比較類似,但是在Linux操作系統下的C應用程序與其他C語言的應用程序還是有很大區別的。就拿上面這個main函數來說,就有不同。大家在仔細看看上面這個main函數,就會發現在這個函數中,筆者使用了參數。這在Linux操作系統下的C應用程序源代碼中是可以的。但是如果在其他的C語言開發環境中,這是禁止的。即在main函數中不可以帶參數。其實在大部分的Linux操作系統命令中都帶有參數。如ls、who命令等等,都可以傳遞參數進去。所以說,雖然他們都是從main函數開始執行。但是統傳統的C語言相比,Linux操作系統下的C語言應用程序在這個函數中可以帶參數,而且還可以有返回值。
為此筆者給出的***個善意提醒就是,如果各位讀者有C語言的編程或者學習經歷的,對于Linux操作系統下的C應用程序開發或許能夠帶來幫助。畢竟在一些語言結構與命令使用上有很多類似的地方。但是在真正的進行開發之前,***能夠通讀一下Linux操作系統下C語言的編程規范。重點需要關注的是同自己以前學的C語言在語法上與編程習慣上的不同。只有如此,在時候進行Linux系統下功能開發或者嵌入式開發的時候,才不會磕磕碰碰,可以達到事半功倍的效果。
二、要想用戶提供詳細的錯誤信息。
即使是有幾十年編程經驗的程序員,在編寫應用程序的時候也難免有考慮不周的地方,在程序運行時會出現錯誤。又或者在需要用戶提供參數的地方,用戶沒有提供恰當的參數,此時也會導致應用程序運行錯誤。也就是說,用戶在使用應用程序的時候,有可能會出現各種各樣的狀況。那么在應用程序開發的時候,就需要注意收集這些錯誤信息,并將錯誤信息詳細、清楚的反饋給用戶,讓他們一看到錯誤信息,就知道是什么問題所造成的,該如何去調整。
如現在系統管理員要編寫一個文件的備份程序。在這個備份程序運行的時候,有可能程序備份會失敗。那么可能是什么原因所造成的呢?有可能是執行這個備份程序的用戶權限不夠,無法讀取需要備份的文件或者對于目標文件夾沒有寫的權限。也有可能是目標文件夾的容量不夠容納需要備份的文件。又或者是在程序運行的過程中被用戶手工強制中斷。如果是異地備份的話,還可能是網絡的原因所造成的。可見導致這個備份程序運行失敗的因素有很多。如果Linux操作系統管理員在開發這個應用程序的時候,只是簡單的提醒這個文件備份成功或者失敗了。在失敗時,沒有指出具體的原因,那么用戶在排除故障原因的時候,不是要對以上各種原因進行一一確認排除嗎?這顯然會引起用戶的反感。為此在Linux操作系統下進行應用程序的開發,需要注意同用戶的交互性。特別是當應用程序運行出現問題時,要詳細的向用戶說明到底是哪個環節出現了問題。其實這只是多了幾條代碼而已,沒有多少難度。就拿這個備份程序來說,在讀取文件、保存文件等等都是相對獨立的工作。在哪個環節上出現問題時,就即時的將這個環節的名字提示給用戶。如此的話,用戶可以根據這個錯誤提示迅速定位問題的原因并及時解決掉。但是不少系統程序開發人員不會如此處理。在程序備份中當某個環節出現錯誤時,他們只是簡單的拋出一個錯誤指令。然后錯誤處理函數接受到這個指令后就會提醒用戶文件備份失敗。但是到底是哪個環節出現了問題是只字不提,讓用戶自己去研究吧。
筆者是先做系統管理員,然后再進入Linux系統程序設計這個領域的。為此對于應用程序過程中拋出的一些模棱兩可的錯誤提示或者千遍一律的程序運行失敗之類的錯誤信息是深惡痛絕的。所以筆者要給大家的第二個善意提醒就是,在程序開發過程中,要多用用系統提供的錯誤函數,盡量向用戶提供詳細的錯誤信息。***是用戶一看到錯誤提示就可以找到問題的原因。
三、提高提示信息的可讀性。
當應用程序在運行時,除了要向用戶提供詳細的錯誤提示信息外,還需要注意這個提示信息的可讀性。特別是有些錯誤信息是操作系統底層拋出的意外,此時Linux操作系統開發人員***能夠將這些普通用戶難以閱讀的信息進行格式化,將其轉換為用戶可以讀的懂的信息。在Linux操作系統中,提供了strerror函數和sys_errlist消息字符串數組,專門用來格式化各種形式的錯誤消息,以提高錯誤提示信息的可讀性。如使用這個strerror函數可以將一些對用戶沒有什么實際含義的錯誤代碼轉換成語言相關的錯誤消息字符串,同時返回指向這個字符串的指針。顯然讀這些語言錯誤信息要比讀哪些錯誤數字代碼要好的多。
另外,如果一個應用程序要調用其它應用程序的話,那么在遇到意外情況時,***能夠購將在哪個應用程序上出現問題也告訴給用戶。如perror函數可以將語言相關的消息(包括錯誤消息、警告消息等等)寫入到標準輸入輸出,描述調用系統函數或者庫函數期間遇到的錯誤。這個函數會輸出參數字符串、錯誤信息、換行符等等。這里主要需要注意的是,在參數字符串中,***能夠帶出出現問題的那個應用程序的名字。有時候某個應用程序可能會調用其它的應用程序,或者說某個應用程序運行時***總共可能會調用數十個應用程序(包括系統函數、庫函數等等)。此時如果系統不向用戶說明到底是哪個程序程序或者系統函數出現了問題,那么用戶在查找問題的時候會很累,感到無從下手。即使是這個應用程序的開發者,過了一段時間以后遇到這個問題時也可能無所適從。所以說,無論是為了自己,還是為了用戶,***在perror函數中包含導致應用程序無法運行的那個程序的名稱或者代碼。這是對用戶進行程序維護與調試時***的教程。
以上三點是Linux操作系統下進行程序開發過程中最基本的要求。像需要了解Linux的系統架構、系統函數、系統接口等等的內容筆者就不多說了,因為這些知識是前提。
【相關文章】