最近在學習《unix網路程式設計》,書上將常用的標頭檔案都放在unp.h裡,需要自己編譯一下**搭建環境。
按照readme的說明進行編譯
$ ./configure
$ cd lib
$ make
$ cd ../libfree
$ make
此時,會在unpv13e資料夾下產生乙個libunp.a的庫檔案
3. 測試編譯是否成功
$ cd ../intro # build and test a basic client program
$ make daytimetcpcli
$ ./daytimetcpcli 127.0.0.1
成功之後會顯示如下:
$ ./daytimetcpcli 127.0.0.1
02 may 2015 12:05:03 cst
將libunp.a放置到/usr/lib/與/usr/lib64/資料夾下,並修改環境變數。將config.h與unp.h放置到原始碼資料夾,修改unp.h中的../config.h為config.h.
開始練習
$ gcc daytimetcpcli.c -lunp
出現如下報錯:
inet_ntop.c:61: error: argument 'size' doesn't match prototype
/usr/include/arpa/inet.h:153: error: prototype declaration
處理:
修改libfree資料夾下的inet_ntop.c第61行 size_t size ->改成 socklen_t size
出現如下報錯:
[root@localhost intro]# ./daytimetcpcli 127.0.0.1
connect error: connection refused
處理:
安裝xinetd
修改 /etc/xinetd.d/daytime檔案中的disable yes
為disable no
重啟xinetd
$ /etc/xinetd.d/ restart
檢視是否開啟daytime
$ netstat -ant
開啟daytime服務後,會有13這個埠
tcp 0 0 0.0.0.0:13 0.0.0.0:* listen
出現如下報錯:
gcc -g -o2 -d_reentrant -wall -c -o connect_nonb.o connect_nonb.c
in file included from connect_nonb.c:1:
unp.h:114: error: redefinition of 『struct in_pktinfo』
make: *** [connect_nonb.o] 錯誤 1
處理:
結構in_pktinfo已經包含在標準標頭檔案bits/in.h中了, 它又通過 netinet/in.h 在unp.h中被包括進來. 只要將 unp.h 中的結構定義comment out注釋掉,然後重新編譯libunp.a
UNP學習筆記
1.一般情況下,伺服器程序在呼叫accpet函式後處於睡眠狀態,它等待客戶的連線和核心對它的接受。tcp連線使用三路握手來建立 tcp三次握手發生在呼叫accept函式後 當握手完畢時,accept函式返回。2.三次握手的全過程實現 下面步驟建立乙個tcp連線 1 伺服器必須準備好接受外來的連線。這...
apue 3與unp在Linux上程式設計環境搭建
在學習unix高階環境程式設計與unix網路程式設計的時候,按照作者的提示操作即可成功的編譯執行這兩本書提供的源 但是如果自己想想在自己的環境裡按照書籍學習,也就是在自己的環境裡呼叫作者封裝的api該怎麼辦呢?很直接的想法是將作者提供的api編譯成linux下的庫,然後將需要的標頭檔案和可檔案拷貝到...
環境配置 mac linux配置環境變數
這裡說的是新增使用者級環境變數。sudo vi bash profile 2 然後通過vim編輯器 當然也可以用其他編輯器如nano 新增或修改環境變數。關於vim操作的常見指令可以參考這裡。編輯完畢後在vim裡輸入 wq退出 3 最後再執行 source bash profile立即生效。4 通過...