APUE筆記 高級進程間通信

UNIX 域套接字

unix域套接字,使用socket相同的接口,用於進程間通信

但它僅僅進行數據複製,不添加報頭,不計算校驗和

unix域套接字,在系統中創建兩個文件,文件不實際存儲數據,指向內核空間中相應地址!

使用socketpair創建一個類似於管道的socketfd fd[2],不同於管道,此管道是全雙工的,在fd 0,1上可寫可讀!

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

匿名的,全雙工的文件描述符填充到sockfd中

成功返回0,失敗返回-1


匿名的un socket只能在有親緣關係的進程中方能使用

使用sockaddr_un 指定文件地址,綁定socket文件描述符可以是不同進程見通信,通過文件名索引到通信管道

在綁定同一文件,若文件存在,則綁定失敗,保證一個文件與一個fd綁定,隱含意思即文件標識地址

在套接字關閉文件不會刪除,需自行關閉文件!

struct sockaddr_un

{

   int sun_family;

   char sun_path[108];//文件路徑 

};

sockadd的地址長度爲famil長度 + 路徑字符串實際長度

so socklen = offset(struct socketaddr_un, sun_path) + strlen(unaddr.sunpath);







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章