標籤:
《UNIX網路編程 卷1》的源碼可以從www.unpbook.com下載得到。解壓之後的目錄為unpv13e。
1. 編譯
進入unpv13e目錄,按如下步驟編譯:
1 ./configure 2 3 cd lib 4 make // 可能遇到問題:redefinition of ‘struct in_pktinfo’ 5 6 cd ../libfree 7 make 8 9 cd ../libroute10 make //這一步可能會出錯,可忽略,只是表示你的系統不支援 4.4BSD,並不影響對該書的學習11 12 cd ../libgai 13 make
針對上邊的問題‘redefinition of ‘struct in_pktinfo’,我們需要將unpv13e/key/unp.h及unpv13e/sctp/unp.h中的“struct in_pktinfo”結構體聲明注釋掉,因為它已經被包含在標準標頭檔bits/in.h中了。修改之後需要重新編譯 。
以上步驟會產生一個靜態庫libunp.a。
2. 將產生的 libunp.a 靜態庫複製到/usr/lib/ 和 /usr/lib64/ 中
1 cd .. //回到 unpv13e 目錄 2 sudo cp libunp.a /usr/lib 3 sudo cp libunp.a /usr/lib64
3. 修改 unpv13e/lib/unp.h 並將其和 config.h 拷貝到 /usr/include 中
1 vim lib/unp.h //將 unp.h 中#include "../config.h"修改為#include "config.h" 2 sudo cp lib/unp.h /usr/include 3 sudo cp config.h /usr/include
4. 運行樣本(unpv13e/intro/daytimetcpcli.c)
1)編譯時間必須加上靜態連結庫:-l 參數加上 libunp.a 去掉lib和後面的.a。最後得到參數-lunp
1 cd ./intro 2 gcc daytimetcpcli.c -o daytimetcpcli -lunp
2)測試上面產生的可執行檔擷取本機當前日期:
1 ./daytimetcpcli 127.0.0.1
在進行測試時會出現以下錯誤:
1 connect error:Connection refused
3)該錯誤表示 daytime 服務程式沒開,可通過 xinetd來實現對服務串連請求的控制。以下通過 xinetd 開啟 daytime 服務程式。
1 sudo cd /etc/xinetd.d/2 sudo vim daytime
如果xinetd.d檔案夾是空的,則需要先安裝xinetd服務:
1 sudo yum install xinetd.x86_64
將 daytime-stream 和 daytime-dgram 兩個檔案中的 disable = yes 修改成 disable = no,並儲存退出,然後重啟 xinetd:
1 service xinetd restart
4)再次測試該例子,能成功顯示本機時間:
1 ./daytimetcpcli 127.0.0.12 22 JUN 2015 15:20:03 CST
參考博文:
《網路編程》關於 UNIX網路編程 卷1 的 unp.h 和源碼編譯問題
Unix NetWork Programming——環境搭建(解決unp.h等源碼編譯問題)
CentOS開啟daytime伺服器
《UNIX網路編程 卷1》之"學習環境搭建"(CentOS 7)