程序間通訊方式之(五)訊息佇列

2021-07-22 17:24:44 字數 1232 閱讀 9744

訊息佇列:  是ipc的一種,由訊息佇列id來唯一標識,

是乙個訊息的列表,使用者可以在訊息佇列中新增訊息,讀取訊息等

訊息佇列可以按照型別來傳送/接收訊息

訊息佇列的操作:建立或開啟訊息佇列,msgget函式

新增訊息

msgsnd函式

讀取訊息            msgrcv函式

控制訊息佇列        msgctl函式

int msgget(key_t key,int flag)

函式引數:key:和訊息佇列關聯的key

flag:訊息佇列的id

函式返回值:成功:訊息佇列的id

出錯:-1

int msgsnd(int msqid,const void*msgp,size_t size,int flag)

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

msgp :指向訊息的指標,常用的訊息結構magbuf如下

struct msgbuf;   //訊息正文

size:    傳送的訊息正文的位元組數

flag:ipc_nowait   訊息沒有傳送完成函式也會立即返回

:  0         直到傳送完成函式才返回

函式返回值0成功,-1出錯

int msgrcv(int msgid,void*msgp,size_t size,long msgtype,int flag)

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

msgp:接收訊息的緩衝區

size:要接收訊息的位元組數

msgtype:    0:接收訊息佇列中的第乙個訊息

大於0:接收訊息佇列中第乙個型別為msgtyp的訊息

小於0:接收訊息佇列中第乙個型別為msgtyp的絕對值且型別值又最小的訊息

flag:0若無訊息函式會一直堵塞

ipc_nowait:若沒有訊息,程序會返回enomsg

返回值:成功:接收到的訊息的長度,

出錯:-1 

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

函式引數:msgqid:訊息佇列的佇列id

cmd:ipc_stat:讀取訊息佇列的屬性,並將其儲存到buf指向的快取區中

ipc_set:設定訊息佇列的屬性,這個值取自buf引數

ipc_rmid:從系統中消除訊息佇列

buf:訊息佇列緩衝區

返回值:成功  0

出錯 -1

訊息佇列 程序間通訊方式

一 概念 訊息佇列是由存放在核心中由訊息組成的鍊錶,由ipc id標識。使用者可以在訊息佇列中新增和讀取訊息。特點 1.訊息佇列提供的是一種帶有資料標識的特殊管道,因此可以選擇性的讀取資訊 2.如果訊息佇列中有多條型別一樣的訊息,接收的時候只能按照先後順序接收 佇列特點 3.如果你接收的訊息型別不存...

程序間通訊之訊息佇列

include include define max msg buf len 512 int ikey 6004 struct ipcmsgbuf int main void 寫訊息佇列 memset msgdata,0,sizeof struct ipcmsgbuf msgdata.mtype 1...

程序間通訊之訊息佇列

訊息佇列其實就是提供了一種從乙個程序向另乙個程序傳送乙個資料塊的方法。我們可以通過傳送訊息來避免命名管道的同步和阻塞問題。此外,訊息佇列和管道不同的是,訊息佇列是基於訊息的,而管道是基於位元組流的,且訊息佇列不一定是先入先出。訊息佇列與命名管道有一樣的不足,就是每個訊息的最大長度是有上限的 msgm...