linux程序通訊訊息佇列的概述和使用

2021-10-09 11:56:05 字數 1597 閱讀 7867

訊息佇列相比於管道較為靈活,訊息佇列中將資訊進行編號進行傳送和接受。

訊息佇列函式

1.建立訊息佇列函式

int msgget(ket_t key,flag):

key可以自己隨便建立數字,也可以通過系統分配給key,牢記key的型別是key_t 。

flag是標誌符,一般可以是ipc_creat|0777。

返回值為訊息佇列識別符號一般就取名msgpid。

2.讀訊息佇列的訊息

msgrcv(msgpid,結構體的指標,結構體,結構體大小直接用sizeof就好了,內容的識別符號,0(表示預設))

3、使用msgctl()函式設定或獲取訊息佇列屬性:

int msgctl(int msgid,int cmd,struct msqid_ds* buf);

函式第1個引數為msgget()返回的訊息佇列識別符號,第2個引數cmd為執行的控制操作,包括以下選項:

4、使用msgsnd()函式傳送訊息:

//from /usr/include/sys/msg.h

int msgsnd(int msgid,void* msg,size_t size,int msgflag);

函式第1個引數為訊息佇列識別符號,第2個引數為使用者定義的緩衝區,使用以下結構:

//from /usr/include/sys/msg.h

struct msgbuf

;第3個引數為接收訊息的大小,第4個引數指定訊息達到系統界限時,要採取的操作,一般取ipc_nowait即如果需要等待,則函式立即返回錯誤。若設定為0,則表示函式將會一直阻塞。

5、使用msgrcv()函式接收消

int msgrcv(int msgid,void* msg,size_t size,long mtype,int msgflag);

函式引數同msgsnd()一樣,只是多了乙個mtype,表示要接收的訊息佇列型別。

以下是訊息佇列測試**,起動兩個程序,乙個不斷從終端讀取資料並傳送出去,另乙個程序不斷讀取訊息佇列內容,並列印出來,方式均為非阻塞

msg_send.c

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

typedef struct msg

msg;

int main()

}return 0;msg_recv.c

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

typedef struct msg

msg;

int main()

return 0;

Linux程序通訊 訊息佇列

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

linux訊息佇列程序通訊

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

linux 程序 訊息佇列通訊

1.概述 該demo主要實現linux下程序之間的訊息佇列通訊,相關介面介紹可以參考 2.場景 半雙工 父程序簡單地通過訊息佇列將資料傳送給子程序 3.測試 程序程式設計demo 訊息佇列 ipc相關的命令 ipcs ipcrm 釋放ipc 檢視程序屬性 ulimit a include inclu...