程序間通訊的三種方式

2021-08-19 08:07:15 字數 2188 閱讀 7788

程序通訊:

終端:sigqueue:新的傳送訊號和訊息的函式類似於kill

無名管道:父子間mkfifo  

守護程序:

會話:使用者

會話其:對應乙個使用者,從乙個使用者的登陸到登出

程序組:乙個會話其利誘多個程序組,乙個程序組分為多個程序

終端:乙個會話可以有乙個中斷或沒有,在有的前提下,所以就會有乙個千台程序組,所有的進成都依賴於該中斷,中斷關閉,程序都結束,

狀態裡代價好的是前台。

守護程序:

程序間通訊:

共享記憶體:速度快,記憶體裡開闢一塊共享空間,所有程序都可訪問

訊息佇列:緩衝區

訊號量級:

7500 + 1200 = 8700

ipc機制:posix機制

一. 共享記憶體      

a) 對映機制

i. 將檔案對映為位址空間裡,對位址操作 實際 就是對檔案操作

ii. mmap(起始位址(null的話是系統分配),檔案長度,期待獲取的操作(讀寫執行),讀寫是否影響原始檔,檔案描述符,檔案起始偏移量)

--期待獲取的操作:執行(port_exec)  讀(port_read)  寫(port_write)

iii. 特別注意:對映的檔案裡不能為空,因為不能擴大原始檔,只能讀或修改,不能增加內容,不一定從頭開始對映,不一定全部對映

1. 開啟檔案

2. 檔案對映(不一定全部對映)

3. scanf  memcpy  è寫操作  mem標頭檔案:string

4. 解除對映mummap()

5. 關閉檔案

b) 鍵值:

i. 用於

標識共享記憶體、訊息佇列、訊號量集,保證不同的程序都能找到同乙個

ii. 

建立:ftok

(路徑名,任意數

)  返回乙個整數,只要兩個引數相同,返回值就一樣

c) 建立共享記憶體,就像是全域性變數一樣,宣告(對映)後即可使用

d) 注意使用完畢以後要

解除對映

刪除共享記憶體  註冊退出函式

i. 建立: mid:共享記憶體專用id

mid=shmget(鍵值(ipc_private(0)只用於父子之間),大小,沒有的話新建)(新建或開啟)

iii. 寫入:memcpy();  

v. 刪除:shmctl(mid,命令,buf(如果刪除這個引數為null)),所以mid得是全域性的  

命令:ipc_stat獲取共享記憶體屬性(第三個引數)  ipc_set修改共享記憶體  ipc_rmid刪除(第三個位null)   (null)

e) ipcs用於檢視:三者的資源、

二. 訊號量集:用於同步和互斥

a) 當訪問共同資源的時候

訊號量:小於零的時候,才能訪問訊號兩級的id  第幾個(從零開始),命令  

b) 開啟的時候為零。

c) cmd是執行的操作

d)  設定多個訊號量的操

三. 訊息佇列(佇列的使用,必須要遵循

先建立è傳送/接收è刪除

三步走一般用於傳送方和接收方速度不同步的情況,一般是接收方阻塞等待

a) b) ftok(「路徑」,整數)   返回值:key_t  即唯一的鍵值,用於標識訊息佇列和ipc

c) msgget(鍵值,操作)   

1. 如果建立,ipc_creat  

2. 如果要開啟,就0,

3. 返回值:開啟或者建立的訊息佇列的 id  int型別的  開啟失敗

就-1d) msgctl(訊息佇列id ,

操作, null):常常用來刪除  佇列  

1. 操作:ipc_rmid  標識刪除

e) msgsnd(佇列id ,結構體(訊息)的指標,訊息大小(

減去4以後

),阻塞(0)/非阻塞(ipc_nowait)):

1. 訊息結構體:struct msgp:

a) 第乙個成員固定為long型別的 mtype(訊息的型別,接收函式據此判斷是否接受)  好處是不同的程序可以共用乙個訊息佇列。

b) 實際的內容

其大小為

sizeof(msgp) – sizeof(long)

f) msgrcv(id ,接收結構體,大小,型別,是否阻塞):  從訊息佇列裡取出資訊

訊息型別一般指定為

0~5,

可用於不同的程序

程序間通訊的8種方式

無名管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。高階管道 popen 將另乙個程式當做乙個新的程序在當前程式程序中啟動,則它算是當前程式的子程序,這種方式我們成為高階管道方式。有名管道 named pipe 有...

程序間的八種通訊方式

共享記憶體是最快的 ipc 方式 1.無名管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。2.高階管道 popen 將另乙個程式當做乙個新的程序在當前程式程序中啟動,則它算是當前程式的子程序,這種方式我們成為高階管...

程序間通訊的8種方式

前言 程序通訊 每個程序各自有不同的使用者位址空間,任何乙個程序的全域性變數在另乙個程序中都看不到,所以程序之間要交換資料必須通過核心,在核心中開闢一塊緩衝區,程序a把資料從使用者空間拷到核心緩衝區,程序b再從核心緩衝區把資料讀走,核心提供的這種機制稱為程序間通訊。程序間通訊 ipc 介紹 程序間通...