《Linux網絡編程》讀書筆記

去年買了《LInux網絡編程》這本,沒想到一放就是半年的時間了,慚愧啊!當年的雄心壯志都去哪了發火?當年買書就想着對LInux來一個深入瞭解,沒想到自己現在都做Linux這個方向快有一年了,卻仍然對Linux瞭解不多,特別是Linux網絡方面的知識~~~~

好,廢話不多說,從今天開始,每天積累一點,厚積才能薄發,磨刀不誤砍柴工。工資趕快漲~~~~~~漲~~~~~大笑。今天先簡單描述吧,博客雖然開通很久,真沒寫過幾篇文章,姑且用來寫流水文章吧,呵呵~~

1991年,Linux開始誕生了,到2011年,Linux的版本從2.6直接蹦到了3.0,據說這個沒什麼大意義,來到了3.0的時代,只是純屬紀念Linux發佈20週年而已。當然在linux之前,存在unix,是貝爾實驗室開發出來,但它存在收費。然後,Minix出來了,是unix的克隆操作系統,這個系統有詳細的書來描述它的原理,所以當時很多人在學習它,包括Linus本人。最後,Linux誕生了。Linux也是unix的克隆操作系統,它和uinix有很好的兼容性。

linux的從誕生到高速發展確實受不了下面5個方面:unix,minix,GNU計劃、POSIX標準和網絡。個人覺得在網絡的時代的今天,linux的發展確實少不了網絡,這也是它的強大之處。那麼,問題來了了,GNU是什麼?一直學習嵌入式Linux,對GUN總是不深入瞭解,今天也簡單描述下吧。

GNU計劃:它的目標是創建一套完全自由的操作系統,保證GNU軟件可以自由地“使用、複製、修改和發佈”,所有GNU軟件都有一份在禁止其他人添加任何限制的情況下授權所有權利給任何人的協議條款,GNU通用公共許可證(GNU General Public License,GPL)。即“反版權”(或稱Copyleft)概念。1991年Linus Torvalds編寫出了與UNIX兼容的Linux操作系統內核並在GPL條款下發布。

Ctrl + R 和nG的使用:這兩個命令一直很少使用,這裏要記住以下:Ctrl + R:撤銷u的操作,nG就是跳到第幾行。

GCC編譯器工具集:GCC是GNU下的編譯工具集,其中gcc,g++分別能編譯c和c++。GCC能很方便的進行交叉編譯,因爲只有定義好目標機器的定義規則,便可試下交叉編譯。GCC裏面的工具在使用的過程中,存在默認的搜索頭文件和庫的路徑。gcc的常用參數:-D:定義不同的宏,-g:包含調試信息,-static:使用靜態庫進行連接,-On:不同的優化等級,一般n設置爲2即可,-c:編譯不鏈接,-E:只進行預編譯,-S:生成彙編代碼,-Wall:開啓所以警告。

靜態庫和動態庫的生成:

靜態庫一般以.a爲後綴,其實就是obj文件的集合,爲快速編譯代碼,可以把少修改的代碼編譯爲靜態庫。一般使用ar這個命令。如生成的鏡頭庫命令:ar -rcs libtest.a test.o:注意:靜態庫的名字爲libtest.a,如果調用靜態庫的方式不是:gcc =o test main.c -L./ -lstr的方式,庫名不一定帶前綴lib。

動態鏈接庫:動態鏈接庫是程序在運行的時候加載的庫。動態庫的安裝其實就是拷貝到/usr/lib、lib或者/usr/local/lib裏面。動態鏈接庫的名字有別名,真名和鏈接命令。一般後綴爲.so。 -shared告訴編譯器生成一個動態鏈接庫。若同一路徑下存在同名的靜態庫和動態庫,默認加載動態庫。動態庫的路徑可以添加到/etc/ld.so.conf文件裏面,那麼編譯器能找到對應的鏈接庫。動態鏈接庫的管理命令:ldconfig:可以查看當前的默認路徑下的鏈接庫以及加載某個添加鏈接庫到ld.so.cache中去。ldconfig -p可以查看當前系統存在哪些動態鏈接庫。注意:運行ldconfig之後,將刷新ld.so.cache緩存文件。

動態加載庫:動態加載庫和動態鏈接庫是不同的,動態鏈接庫在程序啓動是要找到動態庫找到庫函數,而動態加載庫可以用在函數中來動態加載,主要的函數是:dlopen()、dlerror()、dlsym()和dlclose()。dlsym函數在動態加載庫裏面找到需要的函數庫,然後可以調用該函數,當然,調用之前使用dlerror函數判斷是否打開錯誤。

Makefile:從接觸linux以來,總是對Makefile不懂,很多時候根據沒用上,就是能用上,也是拷貝其他的參考即可。不過,今天還是簡單描述一下吧,畢竟工作中還是經常遇到,特別是跳槽的時候,面試會少不了的哦,哈哈~~~也許是自信心不足吧,如今都沒勇氣跳槽,只能暫時拿點小工資了,想si的心都有了~~大哭

好了,那麼Makefile是什麼?Makefile文件提供了一種管理工程的功能,通過make命令,很方便的對整個工程的編譯,而避免了使用手動來編譯龐大的工程文件。其實,make命令也是通過讀取Makefile或者makefile文件,從裏面讀取編譯規則來編譯工程。Makefile或者makefile文件其實就是告訴make命令,生成目標文件需要的材料已經怎麼樣去生成。Makefile的規則是:

目標:依賴文件

(這裏必須是TAB鍵)操作命令,TAB告訴make這個一個命令來的。

例如:

all:main.o hello.o

 $(CC) -c $< -o hellotest

則會對mian.c和hello.c文件都運行$(CC) -c $< -o hellotest這個命令。對於不同的源文件,$<對應着不同的值,所以稱爲自動變量的原因吧。對於目標文件,只有$@和$*了,而$@比較常用。

當然,一個Makefile文件裏面可以存在多條規則,不同的規則直接可以相互嵌套,相互調用。如果make不帶參數,默認執行第一條規則。在Makefile裏面可以使用的變量分爲三種:1、自定義變量,引用爲$(test),2、預定義變量:也就是系統裏面默認變量,如:CC,AR,CFLAGS等。3、自動變量:其實啓動變量是在不同的規則裏面的值是不一樣的,它能自動變化的。比如:$*,$+,$<,$?,$@,$^這幾個自動變量。關於更新詳細的總結,我覺得放置在下一篇文章裏面去。


遞歸調用make:用在多目錄下的程序開發。比如
add:

cd add && $(MAKE)或者$(MAKE) -C add都是代表先進入add目錄,然後使用make命令解析add目錄下的Makefile的規則。

終於描述完了,第一次寫這麼長的總結,還真不容易啊。剛進入嵌入式linux這行的時候,有個前輩就告訴我,每個人學習嵌入式linux都有自己的一套方法,別人的方法不一定適合你,適合自己的方法就是最好的方法。2015,路依舊很長~~



發佈了17 篇原創文章 · 獲贊 8 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章