APUE筆記 高階程序間通訊

2021-07-02 02:12:14 字數 790 閱讀 5228

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);

APUE筆記 程序間通訊

管道 include int pipe int fds 2 fd返回兩個檔案描述符,fd 0 讀,fd 1 寫!管道是單雙工的,只能一端寫,另一端讀,不能兩邊同時讀寫 管道實際上是在,核心中開闢了乙個迴圈佇列,當佇列寫滿 隊空 時,繼續寫 讀 管道會阻塞當前程序!當寫端關閉,繼續讀時返回eof 當讀...

APUE 程序間通訊

現在,某些系統提供全雙工管道,但是為了最佳的可移植性,我們決不應預先假定系統支援全雙工管道。管道只能在具有公共祖先的兩個程序之間使用。通常,乙個管道由乙個程序建立,在程序呼叫fork之後,這個管道就能在父程序和子程序之間使用了。每當在管道中鍵入乙個命令序列,讓shell執行時,shell都會為每一條...

APUE學習筆記 23 程序間通訊之管道

by 潘雲登 對於商業目的下對本文的任何行為需經作者同意。寫在前面 1.本文內容對應 unix 環境高階程式設計 第 2版 第 15章。2.總結了程序間通訊的一種機 制 管道的基本概念和使用方法。3.管道 管道是unix 系統ipc 的最古老形式,在 shell 下的表現形式為管道線。每當在管道線中...