程序間通訊(IPC)總結

2021-10-18 07:56:14 字數 1093 閱讀 5933

管道:使用簡單

fifo:非血緣關係間

訊號:開銷小

共享記憶體:非血緣關係間

本地套接字:穩定性好

訊號 ( sinal ) : 訊號是一種比較複雜的通訊方式,用於通知接收程序某個事件已經發生。

unix domain socket是全雙工的,api介面語義豐富,相比其它ipc機制有明顯的優越性,目前已成為使用最廣泛的ipc機制,比如x window伺服器和gui程式之間就是通過unixdomain socket通訊的。使用unix domain socket的過程和網路socket十分相似,也要先呼叫socket()建立乙個socket檔案描述符,address family指定為af_unix,type可以選擇sock_dgram或sock_stream,protocol引數仍然指定為0即可。

unix domain socket與網路socket程式設計最明顯的不同在於位址格式不同,用結構體sockaddr_un表示,網路程式設計的socket位址是ip位址加埠號,而unix domain socket的位址是乙個socket型別的檔案在檔案系統中的路徑,這個socket檔案由bind()呼叫建立,如果呼叫bind()時該檔案已存在,則bind()錯誤返回。

對比網路套接字位址結構和本地套接字位址結構:

struct sockaddr_in ;

struct sockaddr_un ;

size = offsetof(struct sockaddr_un, sun_path) + strlen(un.sun_path);

#define offsetof(type, member) ((int)&((type *)0)->member)

程序間通訊IPC

這兩天學習了 unix 的程序間通訊 ipc,這裡面有幾個很重要的基本概念,特別是訊息佇列和我的畢設很有關係,因此多說幾句。以前學習的程序間通訊方式,一般都是經由 fork 或exec 開啟檔案,或經過檔案系統。而 ipc是程序間通訊方式的統稱。下面一一道來。一 管道 管道是最老的 ipc形式。管道...

程序間通訊 IPC

part2 index1.html part2 index2.html linux至少支援如下ipc機制 同時支援posix和system v方式 streams ipc機制,linux本身不支援,有乙個單獨的安裝包 可以跨pc的程序通訊 互斥鎖或條件變數 動態初始化 不能使靜態分配 在共享記憶體中...

程序間通訊IPC

乙個大型的應用系統,往往需要眾多程序協作,程序間通訊的重要性顯而易見。首先,程序間通訊至少可以通過傳送開啟檔案來實現,不同的程序通過乙個或多個檔案來傳遞資訊,事實上,在很多應用系統裡,都使用了這種方法。但一般說來,程序間通訊 ipc interprocess communication 不包括這種似...