程序通訊 訊息佇列

2021-07-24 03:35:18 字數 2564 閱讀 9724

訊息佇列的使用:

建立開啟訊息佇列msgget()

讀資料從佇列msgrcv()

寫資料到佇列msgsnd()

控制訊息佇列msgctl()

目前主要有兩種型別的訊息佇列:

posix訊息佇列以及系統v訊息佇列,系統v訊息佇列目前被大量使用

訊息佇列的核心持續性要求每個訊息佇列都在系統範圍內對應唯一的鍵值,所以,要獲得乙個訊息佇列的描述字,必須提供該訊息佇列的鍵值

函式ftok

函式功能:返回檔名對應的鍵值

函式原型:key_t ftok (char*pathname, char proj)

函式引數:pathname: 檔名

proj:專案名(不為0即可)

標頭檔案 :

#include 

#include

返回值 :檔名對應的鍵值

函式msgget

函式功能:建立,開啟訊息佇列

函式原型:int msgget(key_t key, int msg***);

函式引數:key:鍵值,由ftok獲得

msg***:標誌位

標頭檔案 :

#include 

#include

#include

返回值 :與健值key相對應的訊息佇列描述字

建立乙個新的訊息佇列:

1、如果沒有與健值key相對應的訊息佇列,並且 msg***中包含了ipc_creat標誌位。

2、key引數為ipc_private

函式msgsnd

函式功能:向訊息佇列中傳送一條訊息

函式原型:

int

msgsnd(int msqid,struct msgbuf*msgp,int msgsz,int msg***);

函式引數:msqid:已開啟的訊息佇列id

msgp:存放訊息的結構

msgsz:訊息資料長度

msg***:傳送標誌,有意義的msg***標誌為ipc_nowait,指明在訊息佇列沒有足夠空間容納要傳送的訊息時,msgsnd是否等待

標頭檔案 :

#include 

#include

#include

返回值 :成功:0出錯:-1

訊息結構:

struct msgbuf

函式msgrcv

函式功能:從msqid代表的訊息佇列中讀取乙個msgtyp型別的訊息,並把訊息儲存在msgp指向的msgbuf結構中。在成功地讀取了一條訊息以後,佇列中的這條訊息將被刪除

函式原型:int msgrcv(int msqid, struct msgbuf *msgp, int msgsz, long msgtyp, int msg***);

函式引數:msgtyp :訊息的型別號

標頭檔案 :

#include 

#include

#include

返回值 :

msg_rd.c

#include

#include

#include

#include

#include

#include

#include

#include

struct my_msg_st

;int main(void)

/*迴圈從訊息佇列中接收訊息*/

while(running)

printf("you wrote: %s",some_data.some_text);

/*接收到的訊息為「end」時結束迴圈*/

if(strncmp(some_data.some_text,"end",3)==0)

}/*從系統核心中移走訊息佇列*/

if(msgctl(msgid,ipc_rmid,0)==-1)

exit(exit_success);

}msg_wr.c

#include

#include

#include

#include

#include

#include

#include

#include

#define max_text 512

struct my_msg_st

;int main(void)

/*迴圈向訊息佇列中新增訊息*/

while(running)

/*使用者輸入的為「end」時結束迴圈*/

if(strncmp(buffer,"end",3)==0)

}exit(exit_success);

}

msg_rd.c 和 msg_wr.c 編譯後要在linux下的兩個終端裡面執行,能實現乙個終端迴圈輸入,另乙個終端迴圈輸出

程序通訊(訊息佇列)

訊息佇列與管道不同的是,訊息佇列是基於訊息的,而管道是基於位元組流的,且訊息佇列的讀取不一定是先入先出。訊息佇列與命名管道有一 樣的不足,就是每個訊息的最大長度是有上限的 msgmax 每個訊息佇列的總的位元組 數是有上限的 msgmnb 系統上訊息佇列的總數也有乙個上限 msgmni ipc物件資...

Linux程序通訊 訊息佇列

1.訊息佇列 訊息佇列也稱為報文佇列,訊息佇列是隨核心持續的,只有在核心重起或顯示刪除乙個訊息佇列時,該訊息佇列才會真正刪除 系統中記錄訊息佇列的資料結構struct ipc ids msg ids位於核心中,系統中所有訊息佇列都可以在結構msg ids中找到訪問入口 訊息佇列其實就是乙個訊息的鍊錶...

linux訊息佇列程序通訊

訊息佇列 也叫做報文佇列 是unix系統v版本中3種程序間通訊機制之一。另外兩種是訊號燈和共享記憶體。這些ipc機制使用共同的授權方法。只有通過系統呼叫將標誌符傳遞給核心之後,程序才能訪問這些資源。這種系統ipc物件使用的控制方法和檔案系統非常類似。使用物件的引用標誌符作為資源表中的索引。訊息佇列就...