訊息:可以簡單理解為型別+資料
訊息型別需大於等於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...