UNPv1第十四章 Unix域協議

2021-07-11 10:52:19 字數 1144 閱讀 9168

unix域協議並不是乙個實際的協議族,它只是在同一臺主機上進行客戶-伺服器通訊時,使用與在不同主機上的客戶和伺服器間通訊時相同的api(套介面或xti)的一種方法。

當客戶和伺服器在同一臺主機上時,unix域協議是ipc通訊方式的一種替代品。

unix域提供了兩種型別的套介面:位元組流套介面(與tcp類似)和資料報套介面(與udp類似)。

struct sockaddr_un ;
存放sun_path陣列中的路徑名必須以空字元結尾

socketpair函式建立一對相互連線的套介面,這個函式只對unix域套介面使用。

#include 

int socketpair(int family, int type, int protocol, int sockfd[2]);

//返回: 成功返回0,出錯返回-1

family必須為af_local,protocol必須為0,type可以是sock_stream或sock_dgram,新建立的兩個套介面描述字作為sockfd[0]和sockfd[1]返回

建立的兩個套介面是沒有名字的,即沒有涉及隱式bind。

指定type引數為sock_stream呼叫socketpair所得到的結果稱為流管道(stream pipe),這和一般的unix管道(由pipe函式生成)類似,但流管道是全雙工的,即兩個描述字都是可讀寫的。

一般傳遞描述符的方法:

在fork呼叫後,子程序共享父程序的所有開啟的描述字

在呼叫exec時所有描述字仍保持開啟

第乙個例子中程序開啟乙個描述字,呼叫fork,然後父程序關閉描述字,讓子程序處理這個描述字。這樣將乙個開啟的描述字從父程序傳遞到子程序。

兩個程序之間傳遞描述符涉及的步驟:

1).建立乙個位元組流的或資料報的unix域套介面

2).程序可以用任何返回描述字的unix函式開啟乙個描述字:譬如open, pipe, mkfifo, socket或accept。

3).傳送程序建立乙個msghdr結構,其中包含要傳遞的描述字。

4).接收程序呼叫recvmsg在來自步驟1的unix域套接字上接收這個描述符,傳遞描述字不是傳遞描述字的編號,而是在接收程序中建立乙個新的描述字,指向核心的檔案表中與傳送程序傳送的描述字相同的項。

UNPv2第十四章 System V共享記憶體區

include int shmget key t key,size t size,int oflag 返回乙個共享區識別符號 key既可以是ftok返回值,也可以是ipc private size以位元組為單位指定記憶體區大小 include void shmat int shmid,const v...

第十四章 unix域套接字

unix域套接字實際上不是乙個實際的協議,他只是在同一臺主機上客戶和伺服器之間通訊時,使用與在不同主機上客戶和伺服器間通訊時相同的api unix域套接字分為兩種 位元組流套接字和資料報套接字 unix域套接字的好處 1 在同一臺主機上進行通訊時,是不同主機間通訊的兩倍 2 unix域套介面可以在同...

第十四章約束

約束 constraint 是一種保證資料完整性的規則。約束設定在單個字段或者多個字段組合上,寫入這些欄位的行資料必須要符合約束的規則 約束的五種型別 not null 非空約束,指定某列的所有行資料不能包含空值 unique 唯一性約束,指定列或者列的組合的所有行資料必須唯一 primary ke...