第一:我要說一點,UNIX網(wǎng)絡(luò)編程這本書非常之經(jīng)典,高手必讀系列
第二:就算不讀此系列書籍,你照樣可以做一個應(yīng)用開發(fā)者,但為什么我們要學(xué)此塊知識。這個問題嘛,張無忌為什么學(xué)習(xí)乾坤大挪移等武功都比其他人快且厲害,因為他有高深的九陽神功內(nèi)功
第三:UNIX網(wǎng)絡(luò)編程這本書中的api接口你可能在接下來很長一段時間甚至工作中都見不到,那么我們需要死記嗎?這個問題嘛,重在理解其中原理,先大體調(diào)試幾遍,隨著經(jīng)驗和閱歷的增加你的感受會慢慢加深,選取其中重點的一些接口記憶,其他的知道有這么個東西,使用時查閱即可
第四:如果你碰到真正的計算機(jī)高手,別人肯定會建議你有事沒事看源碼(ps:那些天天嚷著需求最重要,計算機(jī)只是實現(xiàn)工具,模板改改拖一拖控件就可以的人可以靠邊了),而此書,就是看服務(wù)程序源碼的基礎(chǔ)。
第五:接下來要編譯的unpv13e是什么?
unix網(wǎng)絡(luò)編程這本書中的源碼,在學(xué)習(xí)此書之前,我們需要將其下載編譯,便于以后調(diào)試
1.源碼環(huán)境和地址
我采用的是ubuntu14.04?。叮次幌到y(tǒng)
下載地址:http://pan.baidu.com/s/1i44Szzv
或者安裝wget,然后切到~/Downloads/下運(yùn)行 wget http://www.unpbook.com/unpv13e.tar.gz (推薦wget這個工具,很好用)
cd ~/Downloads/? //進(jìn)入下載目錄
tar -zxvf unpv13e.tar.gz //解壓壓縮文件夾
cd unpv13e/???? //進(jìn)入解壓后的文件夾,里面結(jié)構(gòu)顯示如下
unpv13e中包含許多子文件夾,每一個子文件夾都代表一個具體模塊的實例,比如,在intro文件夾中,顯示的是第一章簡介中的所有實例程序集合
編譯unix卷1中的示例源碼時,會碰到一些問題。最大的問題在于平臺的差異(以后碰到再說),以后不管是這個源碼還是其他什么架構(gòu)的安裝,作為一個IT工作者,我們首先要查看其中的說明和文檔,此處查看/unpv13e/ 下的README文件
cd ~/Downloads/unpv13e
vim README,此處給出部分截圖
于是,照著上述步驟,第一步
./configure ,部分截圖如下
那么./configure 這句話到底是什么意思呢? 簡單說來,它就是起到一個檢查和生成的作用。檢查你的系統(tǒng)類型,檢查你的gcc,檢查你的某些頭文件是否存在,檢查某些數(shù)據(jù)類型是否被定義,檢查某些機(jī)制是否存在等,最后會生成makefile文件。
//?build the basic library that all programs need
輸入命令行:
cd lib
make
如果沒有報error,則說明make成功
make具體做了什么呢?查看打印在屏幕上的信息可以發(fā)現(xiàn),對于里面的.c文件都做了類似這樣的操作
gcc -I../lib -g -O2 -D_REENTRANT -Wall?? -c -o connect_nonb.o connect_nonb.c, 主要就是把.c文件都編譯生成了對應(yīng)的目標(biāo)文件。然后ar rv ../libunp.a connect_nonb.o connect_timeo.o ...?? 把所有目標(biāo)文件模塊都?xì)w入libunp.a庫中,以后鏈接此庫時直接 -lunp(體現(xiàn)軟件重用的思想)
接下來
cd ../libfree? # continue building the basic library
make
碰到問題如下:
解決辦法: vim inet_ntop.c + 60? 定位到函數(shù)頭,修改size_t? 變?yōu)閟ocklen_t類型
然后結(jié)果如下
warning不管,是書籍作者沒有初始化參數(shù)。
接下來
cd ../libroute ? ? ? ? ? ? ? ? ? ? # only if your system supports 4.4BSD style routing sockets
make
發(fā)現(xiàn)缺少頭文件,編譯終止,因為我用的系統(tǒng)不支持路由套接字(什么是路由套接字以后會慢慢講解)
cd ../libxti?? # only if your system supports XTI
make
我的系統(tǒng)也不支持XTI
最后
cd ../intro??? # build and test a basic client program
make
正常完成,也就是說unix卷1第一章簡介中的所有程序都編譯鏈接完成,可以正常運(yùn)行
下面我們來測試:
先啟動時間服務(wù)程序(一般linux可能自帶時間服務(wù)程序,但默認(rèn)可能是不開啟的,你也可以直接開啟自帶的時間服務(wù)程序)
sudo ./daytimetcpsrv & 記住權(quán)限問題,開啟服務(wù)程序,一般需要綁定和監(jiān)聽端口號,需要授予較高權(quán)限,所以sudo
再運(yùn)行客戶端時間獲取程序
./daytimetcpcli 127.0.0.1
截圖如下
成功!??!