一、訊息佇列
1.訊息佇列提供了乙個從乙個程序向另外乙個程序傳送一塊資料的方法。
2.每個資料塊都被認為是有乙個型別,接受者程序的資料塊可以有不同的型別值。
3.訊息佇列也有管道一樣的不足,就是每個訊息的最大長度是有上限的(msgmax),每個訊息佇列的總的位元組數是有上限的(msgmnb),系統上訊息佇列的總數也有乙個上限(msgmni)。
ipc物件資料結構:
訊息佇列結構:
二、訊息佇列函式:
1.msgget函式:
2.mstctl函式:
3.msgsnd函式:
4.msgrcv函式:
注:
三、**示例
檢視與刪除訊息佇列的命令:
(1)檢視已建立的訊息佇列:
ipcs -q
(2)刪除已存在的訊息佇列
ipcrm -q 163840(訊息佇列的識別符號)( 刪除乙個訊息佇列 )
ipcrm -a(刪除所有建立了的訊息佇列)
【comm.h】
#ifndef _comm_h_
#define _comm_h_
#include
#include
#include
#include
#include
#define pathname "." //"."表示當前目錄
#define proj_id 0x6666 //許可權設定 6(檔案型別)|6(擁有者許可權rw-)|6(使用者組許可權rw-)|6(其他的許可權rw-)
#define server_type 1 //type必須設定成乙個大於0的數
#define client_type 2
struct msgbuf;
int createmsgqueue(); //建立訊息佇列
int getmsgqueue(); //代開訊息佇列
int destorymsgqueue(int msgid); //銷毀乙個存在的訊息佇列
int sendmsg(int msgid,int who,char* msg); //向訊息佇列傳送資訊
int recvmsg(int msgid,int recvtype,char out); //從訊息佇列中讀取資料
#endif
【comm.c】
#include"comm.h"
//success -->(>0) falied -->(-1)
static
int commmsgqueue(int flags)
int msgid=msgget(_key,flags);
if(msgid<0)
perror("msgget");
return msgid;
}int createmsgqueue()
int getmsgqueue()
int destorymsgqueue(int msgid)
return0;}
int sendmsg(int msgid,int who,char* msg)
return0;}
int recvmsg(int msgid,int recvtype,char
out)
strcpy(out,buf.mtext);
return
0;}
【server.c】
#include"comm.h"
int main()
}destorymsgqueue(msgid); //銷毀乙個已存在的訊息佇列
return
0;}
【client.c】
#include"comm.h"
int main()
recvmsg(msgid,server_type,buf);
printf("server# %s\n",buf);
}return
0;}
linux訊息佇列 Linux訊息佇列
訊息佇列,unix的通訊機制之一,可以理解為是乙個存放訊息 資料 容器。將訊息寫入訊息佇列,然後再從訊息佇列中取訊息,一般來說是先進先出的順序。可以解決兩個程序的讀寫速度不同 處理資料速度不同 系統耦合等問題,而且訊息佇列裡的訊息哪怕程序崩潰了也不會消失。最簡單的訊息記憶體的使用流程 ftok函式生...
linux訊息佇列
訊息佇列是核心位址空間中的內部鍊錶,每個訊息佇列都在系統範圍內對應唯一的鍵值,所以,要獲得乙個訊息佇列的描述字,只需提供該訊息佇列的鍵值即可。1 訊息緩衝區結構 存放訊息資料的模板,可在基本定義的基礎上自己定義 在include linux msg.h中宣告,描述如下 struct 可以定義自己的例...
linux 訊息佇列
一 訊息佇列的基本概念 訊息佇列 也叫做報文佇列 是unix系統v版本中3種程序間通訊機制之一。另外兩種是訊號燈和共享記憶體。這些ipc機制使用共同的授權方法。只有通過系統呼叫將標誌符傳遞給核心之後,程序才能訪問這些資源。這種系統ipc物件使用的控制方法和檔案系統非常類似。使用物件的引用標誌符作為資...