訊息佇列是乙個存放在核心中的訊息鍊錶,每個訊息佇列由佇列識別符號標識,與管道不同的是訊息佇列是放在核心當中,只有在核心重啟,或者顯式的刪除乙個訊息佇列,該訊息佇列才會被真正的刪除,以下會有幾個操作,
1.建立訊息佇列
#include
#include
key_t ftok(const char* pathname,int proj_id);
根據傳入的引數的唯一性,建立乙個訊息佇列
int msgget(key_t key,int msgflag);
該引數ley是即為ftok函式的返回值,mshflag是乙個標識引數
ipc_create:如果核心中不存在於key相等的訊息佇列,則新建乙個訊息佇列
ipc_excl和ipc_create一起使用,如果對應鍵值的訊息對流已經存在,則出錯,返回-1
2.寫訊息佇列
int msgsnd(int msgid,struct msgbuf* msgp,size_t msgz,int msgflag)
msgid是訊息佇列的標識
msgp是傳送的訊息
msgz要傳送的訊息的大小
msgflag操作標識,當他是0的時候,當訊息佇列已曼則,msgsnd則會阻塞,直到可以寫入,如果msgflag是
ipc_nowait的時候,如果訊息佇列已滿則,立即返回
3.讀訊息佇列
int msgrcv(int msgid,struct msgbuf* msgp,size_t msglen,long msgtyp,int msgflag);
現在源**如下
msg_server.c
/** main.cpp
* * created on: jul 18, 2014
* author: john
*/#include#include#include#include#include#include#include#include#include#include#include#define buf_size 256
#define proj_id 32
#define path_name "/tmp"
#define server_msg 1
#define client_msg 2
using namespace std;
int main()
msgbuf;
// var define
int qid;//訊息佇列標識
int msglen;//訊息長度
key_t msgkey;
//獲取鍵值
msgkey=ftok(path_name,proj_id);
if(msgkey==-1)
msgbuf.msgtype=server_msg;
if( msgsnd(qid,&msgbuf,strlen(msgbuf.content)+1,0)==-1)
msgbuf;
// var define
int qid;//訊息佇列標識
int msglen;//訊息長度
key_t msgkey;
//獲取鍵值
msgkey=ftok(path_name,proj_id);
if(msgkey==-1)
msgbuf.msgtype=client_msg;
if( msgsnd(qid,&msgbuf,strlen(msgbuf.content)+1,0)==-1)
{cout<<"msg send failed"<
linux C 程序間通訊 訊息佇列
linux 引入訊息佇列的原因是,實現對緊急事件的處理。可以為訊息設定優先順序 下面是乙個共享訊息佇列的例子,在linux2.6的核心中能夠執行,通過訊息佇列實現程序間的通訊,可以自己選擇優先順序,本列優先順序設定為子程序自己的pid.2.6中能夠執行,include include include...
程序通訊之訊息佇列
程序通訊之訊息佇列 一 前言 前面講過,程序間管道的通訊,訊號量控制的通訊,以及一開始的訊號,這些都是程序的通訊方式。訊號通過響應某些條件產生事件,使得另一程序 即接收訊號的程序 做出相應的反應。管道是通過一端寫,另一端讀的方式進行通訊,即所謂的點對點通訊。訊號量是控制程序間對臨界資源訪問的乙個計數...
程序通訊之訊息佇列
1.測試 include include include include include include include includevoid msg show int msg id,struct msqid ds msg info printf n show msg info printf th...