1. 程式人生 > >《網路程式設計》關於 UNIX網路程式設計 卷1 的 unp.h 和原始碼編譯問題

《網路程式設計》關於 UNIX網路程式設計 卷1 的 unp.h 和原始碼編譯問題

       本文針對《網路程式設計 卷1》unp.h 標頭檔案及其編譯問題進行記錄,本書原始碼下載地址 http://www.unpbook.com

       首先進行編譯,在目錄 unpv13e下依次執行以下步驟:

./configure 

cd lib 
make 

cd ../libfree 
make 
  
cd ../libroute
make //這一步可能會出錯,可忽略,只是表示你的系統不支援 4.4BSD,並不影響對該書的學習
  
cd ../libgai 
make 

       將生成的 libunp.a 靜態庫複製到/usr/lib/ /usr/lib64/ 中。
cd ..   //回到 unpv13e 目錄 
sudo cp libunp.a /usr/lib 
sudo cp libunp.a /usr/lib64 

     修改 unp.h 並將其和 config.h 拷貝到 /usr/include 中。
vim lib/unp.h //將 unp.h 中#include "../config.h"修改為#include "config.h" 
sudo cp lib/unp.h /usr/include 
sudo cp config.h /usr/include 

     編譯書本例子。注意:編譯時必須加上靜態連結庫:-l 引數加上 libunp.a  去掉lib和後面的.a。最後得到引數-lunp
cd ./intro 
gcc daytimetcpcli.c -o daytimetcpcli -lunp 

     測試上面生成的可執行檔案獲取本機當前日期:
./daytimetcpcli 127.0.0.1

     在進行測試時會出現以下錯誤:
connect error:Connection refused

     該錯誤表示 daytime 服務程式沒開,可通過  xinetd來實現對服務連線請求的控制。以下通過 xinetd 開啟 daytime 服務程式。注意:以下的所以執行都是以超級使用者許可權進行;
cd/etc/xinetd.d/

 vim daytime

      將 daytime 檔案中的兩個 disable = yes修改成 disable = no,並儲存退出,然後重啟 xinetd
service xinetd restart

     再次測試書本上的第一個例子:此時可以正確獲取本機的當前日期;
unpv13e/intro$ ./daytimetcpcli 127.0.0.1
09 DEC 2014 18:45:57 CST