去年買了《linux網路程式設計》這本,沒想到一放就是半年的時間了,慚愧啊!當年的雄心壯志都去哪了
好,廢話不多說,從今天開始,每天積累一點,厚積才能薄發,磨刀不誤砍柴工。工資趕快漲~~~~~~漲~~~~~
2023年,linux開始誕生了,到2023年,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)概念。2023年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這個命令。對於不同的原始檔,$《對應著不同的值,所以稱為自動變數的原因吧。對於目標檔案,只有$@和$*了,而$@比較常用。
遞迴呼叫make:用在多目錄下的程式開發。比如
add:
cd add && $(make)或者$(make) -c add都是代表先進入add目錄,然後使用make命令解析add目錄下的makefile的規則。
終於描述完了,第一次寫這麼長的總結,還真不容易啊。剛進入嵌入式linux這行的時候,有個前輩就告訴我,每個人學習嵌入式linux都有自己的一套方法,別人的方法不一定適合你,適合自己的方法就是最好的方法。2015,路依舊很長~~
Linux網路程式設計讀書筆記 4
第四章 基本套接字程式設計 4.1 基本套接字函式族 標頭檔案 主要函式 int socket int domain,int type,int protocol 建立socket 描述符 domain af unix,af i af iso type sock stream,sock dgram,s...
Linux網路程式設計讀書筆記 7
第九章高階套接字函式程式設計 9.1 傳送和接收函式的高階用法 標頭檔案 int send int sockfd,void buf,int len,int flags flags msg oob,msg dontwait,msg dontroute int recv int sockfd,void ...
Linux網路程式設計讀書筆記 8
第十一章 資料結構的傳輸和 xdr標準 11.1 資料結構的傳送 網路資料結構傳遞可能存在以下問題 網路字序問題 浮點數傳輸 指標處理 自定義手工處理方式 將待傳送資料結構轉換以後放入應用的傳送緩衝區 將應用的接收緩衝區中資料結構轉換以後再進行資料處理。示例 void send int32 2buf...