訊息長度 Linux程序間通訊 訊息佇列

2021-10-25 12:52:59 字數 1646 閱讀 4123

無論傳送程序還是接收程序,都需要在程序空間中用訊息緩衝區來暫存訊息。該訊息緩衝區的結構定義如下

struct msgbuf ;
通過msgget建立訊息佇列

函式原型如下

#include #include #include int msgget(key_t key, int msg***);
引數

ipc_creat如果訊息佇列物件不存在,則建立之,否則則進行開啟操作ipc_excl如果訊息物件不存在則建立之,否則產生乙個錯誤並返回
返回值

那麼如何獲取key值?

向訊息佇列中新增資料,使用到的是msgsnd()函式

函式原型如下

int  msgsnd(int msgid, const void *msg_ptr, size_t msg_sz, int msg***);
引數

返回值

從訊息佇列中讀取訊息,我們使用msgrcv()函式,

函式原型如下

int  msgrcv(int msgid, void *msg_ptr, size_t msgsz, long int msgtype, int msg***);
引數

msgtype>0且msg***=msc_except,接收型別不等於msgtype的第一條訊息

返回值

函式原型

int  msgctl(int msqid, int command, strcut msqid_ds *buf);
引數

注意:若選擇刪除佇列,第三個引數傳null返回值

如果操作成功,返回「0」;如果失敗,則返回「-1」

舉乙個例子,父程序寫訊息(先寫傳送的資料型別,再寫資料),子程序收訊息型別為1的訊息

#include #include #include #include #include #include #include #define msgkey 123//訊息的資料結構是以乙個長整型成員變數開始的結構體struct msgstru;int main()}pid = fork();//建立子程序if (pid > 0)}}else if (pid == 0)}}elsereturn 0;}
執行結果

Linux程序間通訊 訊息佇列

linux和類linux系統下程序間通訊 inter process communication,ipc 有很多種方式,包括套接字 socket 共享記憶體 shared memory 管道 pipe 訊息佇列 message queue 等,各自有各自的一些應用場景和用途,這次就來聊一聊訊息佇列這...

linux程序間通訊 訊息佇列

訊息佇列由id 唯一標識 訊息佇列就是乙個訊息的列表,使用者可在佇列中新增,讀取訊息等 可按照型別來收發訊息 int msgget key t key,int flag int msgsnd int msqid,const void msgp,size t size,int flag msqid 訊...

Linux程序間通訊 訊息佇列

首先上篇文章我們說到了linux下進行程序間通訊的一種方法或機制匿名管道和命名管道,那麼這裡要說的是另外一種與之不同的通訊方法,即訊息佇列,兩者之間有相同也有不同的地方,具體的下面就一一介紹。一 什麼是訊息佇列?首先它也是一種進行程序間通訊的方式,通過乙個程序向另外乙個程序傳送資料塊的方式,每個資料...