程序的通訊機制(IPC)

2021-09-11 20:17:32 字數 1452 閱讀 5251

管道是指用於連線乙個讀程序和乙個寫程序以實現他們之間進行通訊的共享檔案。

管道機制必須提供以下三方面的協調能力:互斥、同步、和確定對方存在

管道操作,只能採用半雙工通訊,即某一時刻只能單向傳輸。要實現父子雙方之間相互通訊,則要定義兩個管道。

下面則是實現的父子雙方使用管道進行通訊的例項:

#include#include#include#include#includeint main()

if(pipe(fd2)<0)//父程序建立管道檔案2

if((pid=fork())<0)//父程序建立子程序

else if(pid==0)//子程序關閉管道檔案1的寫埠,和管道檔案2的讀埠

close(fd1[0]);//關閉讀寫埠

在訊息傳遞的通訊中,資訊是以訊息為單位進行傳遞的。

直接通訊方式:傳送程序直接把訊息傳送給接收程序,並將它掛在接收程序的訊息緩衝區佇列上,接收程序則是從訊息緩衝區中取訊息的。

下面例項中,訊息我們定義了結構體進行存放

#include#include#include#include#include#include#include#includestruct message

;//定義結構體,存放訊息

int main()

if((qid=msgget(key,ipc_creat|0666))==-1)

msg.msg_type=2;

pid=fork();//建立子程序

if(pid<0)

else if(pid==0)//子程序先清空緩衝區,再接收訊息

else

}else//父程序將訊息拷貝到訊息結構體中,進行傳送訊息

wait(null);//父程序等待子程序的結束

共享記憶體是指在通訊程序之間存在一塊可直接訪問的共享空間,通過對該共享空間進行讀寫操作(需使用同步互斥工具,如p,v操作)

該方式是不需要經過通過使用者核心實現的,而其它方式則需要由使用者核心進行實現。該共享空間是由系統開闢出來供程序進行共同訪問的。

該通訊方式可使用posix版本訊號量機制來實現執行緒之間的同步與互斥

詳情請見

程序間通訊機制(IPC)

1.訊號機制 主要用於向乙個或多個程序發非同步事件訊號,訊號可以通過鍵盤中斷觸發,也可以有程序訪問虛擬記憶體中不存在的位址這樣的錯誤來產生。訊號機制還可以用於shell向它們的子程序傳送作業控制命令。linux使用存貯在每個程序task struct結構中的資訊實現訊號機制,它支援的訊號數受限於處理...

Android的IPC 程序間通訊 機制

from ipc是內部程序通訊的簡稱,是共享 命名管道 的資源。android中的ipc機制是為了讓activity和service之間可以隨時的進行互動,故在android中該機制,只適用於activity和service之間的通訊,類似於遠端方法呼叫,類似於c s模式的訪問。通過定義aidl介面...

程序通訊 IPC

訊號 管道 訊息佇列 共享記憶體 定義 程序間的軟體中斷通知和處理機制 訊號的接收處理 捕獲 catch 忽略 ignore 遮蔽 mask 不足 傳遞的資訊量小,只有乙個訊號型別 程序間基於記憶體檔案的通訊機制 匿名管道只能在父子程序間進行通訊,不能再網路間進行通訊,而且資料傳輸是單向的,只能一端...