歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> Unix C語言值得注意的地方

Unix C語言值得注意的地方

日期:2017/2/28 11:29:13   编辑:關於Unix


前些天我寫了一篇“Unix C語言值得注意的地方”一貼,回貼中談到學習國外的開源軟件中的高質量代碼的問題,但是有朋友跟我說,在看代碼的過程中感覺難度很大,想想也是如此,動辄十幾萬行的程序如果沒有人指點的話是很難找到切入點的,所以我撰寫了此文希望能對廣大C語言愛好者有所幫助,在文章中有很多煽情的地方還請大家原諒,因為這篇文章使我想到了剛剛畢業的時候,所以有點感慨。同時文章中還有一些個人偏見存在,希望持反方向意見的人多多包涵,既然是偏見,那它只是偏見。

學習C語言不要心急,要循序漸進,須知欲速則不達的道理。千萬不要盲目的寫大量的代碼,這樣做只會堆出大量的低檔次代碼,同時使你形成不好的代碼習慣。先買本基礎的教材來看看,使得對C語言有個初步的認識,其實我現在手頭上還放著《The C Programming Language》和《C程序設計(第二版)》(大學教材)呢,有些時候我還會為了一些基本性的概念來翻翻看呢。

如果你的身邊有高水平的開發人員,那麼再好不過了,多多向別人請教。但是就我了解的情況來看,大部分的初學者並沒有在進入IT行業後得到一個資深的軟件工程師的指導,而恰恰是在入司後就被推向前線,替老板們騙取客戶口袋裡的錢,在這個過程中很多人都是在苦苦的堆代碼,賺著可憐的薪資。盡管我也是在拿著可憐的錢,但是有一點我是幸運的,因為我在我的第一家公司裡遇到了帶領我走向Unix和C語言領域的導師,正是他的一句“Unix和C語言是你一生都要去學習的技術”讓我狂熱的愛上了它們,正是他的一句“你有root口令,並不是你有root口令這麼簡單,更多的是一種責任”(說這句話的前提是我用root口令進入SUN服務器後刪除了別人的東西,因為我認為這些是無用的東西)使我對責任這兩個字有一個非常具體的認識。所以在這裡請廣大讀者允許我用一些篇幅來對我neusoft的導師yuhj表示深深的感謝。同時也對CU的朋友們表示深深的感謝,可以說,你們是我的第二導師,我已經離不開你們了。

希望大家都比我幸運,沒有得到幸運之神垂青的朋友們也不要灰心,多上CU上來和大家交流交流,討論討論吧,但是注意在論壇上討論的時候不要刨根問底,很多事情不是一句話就說的清楚的,別人只能給你一個指引,再具體的只有靠自己多研究研究、琢磨琢磨。閒暇的時候去精華區看看,你會有意外的收獲的。

千萬不要一看到英文就頭大,盡管我也是這樣,並不是看不懂(畢竟也接受過CET4、6級啞巴英語的教育,還是能看懂的)。man的幫助是最好的教材並且很多國外的論壇對技術的描述是很清楚的,也是很簡單的,更重要的是,你會在上面看到些在國內論壇上看不到的東西(計算機的技術一直都是由西方向東方傳遞,希望有朝一日老外都到我們中國的論壇上來尋找技術資料)。

學習C語言有一件事情也是必須要學的,而且最好是同時學,有的朋友可能已經猜出來了,沒錯,是Unix。Unix和C語言可以說大家提的很多了,有Unix的地方就有C語言,同時也正是有了C語言,才有了Unix(我們還是先討論討論雞生蛋還是蛋生雞的哲學問題吧,誰拿西紅柿打我),甚至有人說C語言就是為了Unix而設計的,可見Unix和C語言之間的非同尋常的關系。學習Unix現在容易多了,以前Unix都是運行在大型的服務器上的,可是現在有了Linux(按照GNU的意思,Linux就是Linux還不能叫Unix),大家可以在自己的PC上裝一套Linux來學習,注意學習Linux不要拿Linux和Windows來比較,它們不可同日而語。Linux會讓你知道什麼是經典,永遠讓你在一個方向上大展宏圖,Windows只會讓你在別人的套子裡耍上大刀,不時的還要換一個套子耍耍。下面羅列了一些我在學習Unix的一些經驗:

1、學習Unix和C語言,先向大家推薦一本書《Unix高級環境編程》,這本書是學習Unix和C的經典之作,盡量把書中提到的系統調用都寫個練習程序,先感性的認識一下Linux系統提供給用戶的系統調用都是干什麼的,怎麼用。系統調用是內核提供給用戶的功能用以申請內核服務,對於Linux內核的學習,從系統調用入手是個不錯的辦法。學習過程可以參看Linux的聯機幫助,和網絡上的資料。當你覺得差不多了的時候,那我給大家出一道聯系題目吧:實現一個ftp服務器和客戶端的功能,完全可以自己定義一些應用層的協議,只要能實現用簡單的命令傳輸文件就可以了。

這個題目可以使你練習到TCP/IP的基本編程方法和文件操作的基本方法對於後面學習內核的文件系統會有幫助的。


2、當你對Unix系統有了些了解後,同時對於大部分的系統調用(關鍵是關於文件的系統調用,對於Linux系統的內核來說從文件系統入手相對容易一些)也有了清楚的認識後,再推薦你一本書《Linux內核情景分析》,該書是關於Linux內核的經典之作唯一美中不足的是沒有關於網絡子系統的詳細介紹。你可以從文件系統的系統調用入手,慢慢的你就會對Linux有了一個更深入的認識。同時注意很多經典的方法和思想在Linux中的運用。你會認識到為什麼Unix把所有的東西都看成文件,對什麼東西操作都是對文件操作,你會慢慢體會到Unix的經典之處了。

3、當你對Linux內核有了些了解後,你就可以找個方向來專門發展了,如果你想對眼下流行的網絡編程感興趣,那麼再推薦你一本書《TCP/IP詳細解釋》,這本書是關於TCP/IP協議的經典之作。你會學習到TCP/IP協議棧是如果實現的,為什麼,各層協議之間是如何工作的。你看完了這本書後,你就可以自己寫一個dos攻擊程序和sniffer了。

我說的簡單,其實我提到的每本書至少都夠你研究很長時間的,所以希望初學者別著急不驕不躁,相信只要努力過,一定會成為高手的。

在寫代碼的時候大家要注意養成好的代碼習慣和風格還有抽象能力。

下面給出大家在寫代碼的時候的20字方針:

函數要小
盡量的把函數弄的通用點,代碼行少點,一個函數只完成一個簡單的功能,一眼就能看出來此函數有沒有代碼錯誤,每個函數都是健壯的,那麼你的程序就是健壯的。

代碼要少 完成一個功能的時候在邏輯清楚的情況下代碼越少越好,千萬不要比代碼誰寫的多啊。

算法要好 在完成一個功能的時候要考慮效率,目前計算機的內存很大,所以內存已經不是首要考慮的因素了,但是在某些特殊的地方效率還是很重要的。有效率高的算法,就不用效率低的算法,看看本版有一篇精華貼子是關於把一個字符竄兩邊的空格去掉的帖子(trim),很多人都提出了算法,但是有一個算法是最好的,效率最高,代碼最少,是算法要好的最好體現

命名要清 命名要清楚,最要用漢語中的謂賓結構如set_buffsize()

文件要多 盡量把一個大的程序安功能分成多個文件,一個文件盡量不要超作1000行,這樣就很清楚的知道那個文件代碼是健壯的,那個文件有可能有隱患,在代碼檢查的時候可以有針對性的檢查某幾個文件.
Copyright © Linux教程網 All Rights Reserved