程序間通訊 IPC 訊息佇列

2021-10-09 06:50:58 字數 1312 閱讀 6548

訊息:可以簡單理解為型別+資料

訊息型別需大於等於1,0代表著不區分訊息型別,也可以認為是任何型別

struct mess

訊息佇列在同一型別上的訊息傳遞符合先進先出的規定,對於整個訊息佇列而言,類優先順序佇列

引用標頭檔案#include

建立

int msgget( ket_t )key , int flag);

返回值為核心物件的識別符號,即所建立的訊息佇列的識別符號,建立失敗返回-1

flag標誌位,這裡一般給出ipc_creat | 許可權,例如:ipc_creat|0600

傳送訊息

int msgsnd( int msgid , void*ptr , int datalen , int flag );

msgid:核心物件的識別符號,即msgget返回值,ptr指向結構體訊息,指向的訊息資料型別包含乙個long int的型別字段,以及資料字段。datalen:資料部分的有效長度,flag:標誌位,此處我們一般預設給0。

接收訊息

int msgrcv( int msgid , void* ptr , int size , long type , int flag );

size:訊息資料部分的有效長度,type:想要接受的訊息的訊息型別,flag:標誌位,此處我們一般預設給0。

刪除核心物件訊息佇列的ipc結構,即釋放資源,使用下面設定屬性函式

設定屬性:int msgctl( int msgid , int cmd , struct msgid_ds*buff );

cmd:命令,刪除是ipc_rmid,struct msgid_ds*buff我們一般預設給0。

阻塞:若訊息佇列放滿訊息,則傳送端msgsnd()會阻塞,訊息隊列為空,則msgrcv()會阻塞。

傳送與獲取訊息時,必須指定訊息型別,值一般》=1,0不區分訊息型別或可理解為表示所有訊息型別

linux終端命令列操作命令:

ipcs -q 檢視訊息佇列

ipcs -q msgid 刪除訊息佇列

**如下

程序間通訊 IPC 訊息佇列

訊息佇列是訊息的鏈結表,儲存在核心中,由訊息佇列識別符號標識。有足夠寫許可權的程序可往佇列中放置訊息,有足夠讀許可權的程序可從佇列中取走訊息。posix 和 system v 下的訊息佇列略有不同,主要體現在一下幾個方面 這裡我們以 posix 下的訊息隊列為例來進行講解。訊息佇列的建立 訊息佇列的...

4 程序間通訊 訊息佇列IPC

1 建立乙個訊息佇列,然後使用msgctl函式讀取相關資訊,單程序 code 結果 root ubuntu code chap9 run1 res is 0 buf.msgmax 8192 rev msg hello world 2 使用訊息佇列實現實時通訊 注 阻塞的 可以考慮實現雙向的基於型別的...

訊息佇列IPC 用途 程序間通訊

0 下面用的標頭檔案 common.h 1 建立訊息佇列 2 配置訊息佇列 3 相乙個訊息佇列中寫訊息 4 從訊息佇列中讀取訊息 5 意除訊息佇列 5 訊息佇列api 1 函式 megget 建立乙個新的訊息佇列 或者獲取訊息佇列id 2 函式 msgsnd 向訊息佇列傳送訊息 3 函式 msgrc...