網上很多關於unix怎麼現在除錯的 ,我說一句,其實沒必要裝apue,
直接發命令了
1,./configure
2, cd lib
3,make
4,cd ../intro
5,make daytimetcpcli ,也可以不執行這一句 ,走預設的gcc daytimetcpcli.c -i ../lib ../libunp.a (-i 是制定include的資料夾,視為unp.h, 後面這個味 預設的載入的動態鏈結庫)
6,執行
說下開始看的心得,
socket(af_inet, sock_stream, 0) ->unp.h->sys/socket.h:
/* create a new socket of type type in domain domain, using
protocol protocol. if protocol is zero, one is chosen automatically.
returns a file descriptor for the new socket, or -1 for errors. */
extern int socket (int __domain, int __type, int __protocol) __throw;
下面是 一般通用解釋
我們使用系統呼叫socket()來獲得檔案描述符:
#include
#include
int socket(int domain, int type, int protocol);
第乙個引數domain設定為「af_inet」。
第二個引數是套介面的型別:sock_stream或
sock_dgram。第三個引數設定為0。
系統呼叫socket()只返回乙個套介面描述符,如果出錯,則返回-1。
af_inet(又稱 pf_inet)是 ipv4 網路協議的套接字型別,af_inet6 則是 ipv6 的;而 af_unix 則是 unix 系統本地通訊。選擇 af_inet 的目的就是使用 ipv4 進行通訊。因為 ipv4 使用 32 位位址,相比 ipv6 的 128 位來說,計算更快,便於用於區域網通訊。
而且 af_inet 相比 af_unix 更具通用性,因為 windows 上有 af_inet 而沒有 af_unix。
這個引數指定乙個協議簇,也往往被稱為協議域。系統存在許多可以的協議簇,常見有af_inet──指定為ipv4協議,af_inet6──指定為ipv6,af_local──指定為unix 協議域等等。它值都是系統預先定義的巨集,系統支援哪些協議我們才可以使用,否則會呼叫失敗。協議簇是網路層的協議。
可以到核心原始碼linux/socket.h中檢視支援的協議簇有哪些。 另外有#define pf_* af_*
sock_stream:即為tcp控制傳輸層,意為 位元組流,我們知道tcp是面向流的,udp是面向包的,這個引數指定乙個套介面的型別,套介面可能的型別有:sock_stream、sock_dgram、sock_seqpacket、sock_raw等等,它們分別表明位元組流、資料報、有序分組、原始套介面。這實際上是指定核心為我們提供的服務抽象,比如我們要乙個位元組流。需要注意的,並不是每一種協議簇都支援這裡的所有的型別,所以型別與協議簇要匹配。
引數protocol
指定相應的傳輸協議,也就是諸如tcp或udp協議等等,系統針對每乙個協議簇與型別提供了乙個預設的協議,我們通過把protocol設定為0來使用這個預設的值。注意這裡的協議與上面的協議簇是兩個不同的概念,前者是指網路層的協議,由於它對於到傳輸層會出現許多協議,比如ipv4可以用來實現tcp或udp等等傳輸層協議,所以稱為協議簇。相應的傳輸層的協議就簡單地稱為協議。常見的協議有tcp、udp、sctp,要指定它們分別使用巨集ipproto_tcp、ipproto_upd、ipproto_sctp來指定。
到linux/in.h看可以使用哪些傳輸層的協議
Unix學習筆記 Unix程式設計例項練習
下面我們來看一下例子 對於這個例子 我有幾點要說明 1.如何看待這個例子?2.弄懂每一條語句的作用?3.program source include include include include intmain int argc,char argv if cpid 0 else if wifexi...
unix網路程式設計(筆記一)
一。1.乙個長時間執行的程式,即守護程序,它只在響應來自網路的請求時才傳送網路訊息。2.通常乙個客和每次只與乙個伺服器通訊,不過以web瀏覽器為例子,該客戶端程式卻可以與多個不同的web伺服器通訊。3.tcp ip 協議簇 也稱為 網際協議簇 4.英特網 和 網際網 網際網路是乙個網際網 網際網是採...
UNIX環境高階程式設計學習筆記(一)UNIX基礎知識
1.作業系統可被定義為一種軟體,它控制計算機硬體資源,提供程式執行環境。通常稱為核心 kernel 2.核心的介面被稱為系統呼叫。公共函式庫建在系統呼叫介面之上,應用程式既可使用公共函式庫,也可使用系統呼叫。shell是乙個特殊的應用程式,為執行其他應用程式提供乙個介面.3.unix檔案系統是目錄和...