前言
能說能抄能論皆不算,能寫能打才是真功夫。
嘮叨反正我也是乙個孤獨的程式猿,多說一些奇奇怪怪的嘮叨也無妨,第一次寫訊息佇列,書本的東西和實戰很不同,根據實戰總結的一些注意事項會和大家分享,也敲打敲打自己,以後別總是想當然,要頭頂藍天,腳踩大地,做乙個能文亦能武的敦厚男人。
簡介訊息佇列是linux提供的一種便利的ipc機制,不具有任何血緣關係的程式可以通過訊息佇列進行便利的通訊:不同的程式通過同樣的key訪問同乙個訊息佇列,支援不同優先順序的訊息佇列,效率較高且使用便利。
訊息佇列常用的幾個api
ftok:根據指定檔案和引數生成key
msgget:建立或者附加乙個訊息佇列
msgctl:獲取訊息佇列的資訊或者設定訊息佇列的引數
msgsnd:向訊息佇列中新增訊息
msgrcv:從訊息佇列獲取一條訊息
發訊息**
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
key_t key;
#define max_text 2000
//定義訊息收發結構體,第乙個成員必定為long型,用以儲存msgtype,第二個成員為char字串,長度可以自己定義
struct mymsg
;int main()
//printf("key %d\n", key);
//由於上面提到的原因,採用了指定乙個隨機key的方式進行建立,這次成功了
//msgget用法:返回值為訊息佇列id,第乙個引數為key值,指定key未ipc_private時將建立新的訊息佇列,無法建立時報錯
//第二個引數為flag,ipc_creat表示如不存在就建立新的訊息佇列,加上ipc_excl表示建立新的訊息佇列,無法建立時報錯,通常要加上操作許可權,比如0666
if(imsgid == -1)
cout << "
imsgid:
"<< imsgid << endl;
int ret = 0;
//獲取訊息佇列的屬性資訊,msgctl傳入ipc_stat和msqid_ds物件指標
msqid_ds info;
memset(&info, 0, sizeof(info));
ret = msgctl(imsgid, ipc_stat, &info);
if( ret == -1)
//下面是乙個失敗的嘗試,企圖將訊息佇列的大小擴大至6400000,但系統報錯了,先記錄下來
info.msg_qbytes = 6400000;
ret = msgctl(imsgid, ipc_set, &info);
if(ret == -1)
//linux下特有的支援,可以檢視訊息佇列的系統屬性,傳入ipc_info和msginfo,相關資訊將寫入msginfo
msginfo stinfo;
ret = msgctl(imsgid, ipc_info, (msqid_ds*)&stinfo);
if(ret == -1)
else
mymsg msg;
msg.mtype = 1;
memset(msg.mtext, 11, max_text-1);
msg.mtext[1999] = '
\0';
int count = 0;
while(count != 10000)
count++;
}getchar();
}收訊息**
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
key_t key = 0x31a3852;
#define max_text 2000
struct mymsg
msg;
int main()
cout << "
msqid:
"<< msqid << endl;
int count = 0;
int ret = 0;
while(1)
else}}
小結訊息佇列使用比較簡單,但存在一些限制,僅憑道聽途說怕是不能真正掌握。
linux訊息佇列 Linux訊息佇列
訊息佇列,unix的通訊機制之一,可以理解為是乙個存放訊息 資料 容器。將訊息寫入訊息佇列,然後再從訊息佇列中取訊息,一般來說是先進先出的順序。可以解決兩個程序的讀寫速度不同 處理資料速度不同 系統耦合等問題,而且訊息佇列裡的訊息哪怕程序崩潰了也不會消失。最簡單的訊息記憶體的使用流程 ftok函式生...
Queue訊息佇列實戰python
網上很關於queue的教程都只是個簡單的demo,看完也還是不知道怎麼在實戰中運用,下面的 是在用flask開發自動化測試平台時,用到的有關queue的 首先,在使用者介面所在的user.py檔案中匯入queue庫,並例項化為q 同時新建乙個thread子執行緒,這個執行緒提供功能是消費執行緒,可以...
linux訊息佇列
訊息佇列是核心位址空間中的內部鍊錶,每個訊息佇列都在系統範圍內對應唯一的鍵值,所以,要獲得乙個訊息佇列的描述字,只需提供該訊息佇列的鍵值即可。1 訊息緩衝區結構 存放訊息資料的模板,可在基本定義的基礎上自己定義 在include linux msg.h中宣告,描述如下 struct 可以定義自己的例...