程序間通訊的方式的方式有:管道、訊息佇列、訊號量、共享記憶體、socket。
管道是半雙工(資料可以在乙個訊號載體的兩個方向上傳輸,但是不能同時傳輸)的,其中又分為匿名管道、命名管道兩種,其中匿名管道只能用於具有親緣關係的程序間通訊,命名管道無這種限制。
訊息佇列的本質其實是乙個核心提供的鍊錶,核心基於這個鍊錶,實現了乙個資料結構,並且通過維護這個資料結構來維護這個訊息佇列。向訊息佇列中寫資料,實際上是向這個資料結構中插入乙個新結點;從訊息佇列彙總讀資料,實際上是從這個資料結構中刪除乙個結點。
linux下可用ipcs -q命令檢視已建立的訊息佇列
用來保證兩個或多個關鍵**段不被併發呼叫。在進入乙個關鍵**段之前,執行緒必須獲取乙個訊號量;一旦該關鍵**段完成了,那麼該執行緒必須釋放訊號量。其它想進入該關鍵**段的執行緒必須等待直到第乙個執行緒釋放訊號量。
所謂共享記憶體就是使得多個程序可以訪問同一塊記憶體空間,是最快的可用ipc形式。是針對其他通訊機制執行效率較低而設計的。
往往與其它通訊機制,如訊號量結合使用,來達到程序間的同步及互斥。其他程序能把同一段共享記憶體段「連線到」他們自己的位址空間裡去。
所有程序都能訪問共享記憶體中的位址。如果乙個程序向這段共享記憶體寫了資料,所做的改動會即時被有訪問同一段共享記憶體的其他程序看到。
共享記憶體的使用大大降低了在大規模資料處理過程中記憶體的消耗,但是共享記憶體的使用中有很多的陷阱,一不注意就很容易導致程式崩潰。
也稱套接字,有流式套接字(tcp協議的套接字)、資料報套接字(udp協議的套接字)、原始套接字
根據其用途還可分為主動套接字和被動套接字兩種,其中主動套接字用於發起連線的(connect),被動套接字用於接受連線(listen後)
一般用於網路通訊,不同計算機之間的通訊(使用inet協議族),也可用於本機程序間通訊(unix協議族更快)
程序間通訊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 不包括這種似...