linux 訊息佇列

2021-06-18 14:58:20 字數 1882 閱讀 2617

主要使用函式清單:

// 鍵值構建函式

#include #include key_t ftok(const char *pathname, int proj_id);

// 建立與獲取訊息佇列函式

#include #include #include int msgget(key_t, int msg***);

// 傳送訊息函式

#include #include #include int msgsnd(int msqid, const void *msgp, size_t msgsz, int msg***);

// 接收訊息函式

#include #include #include ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msg***);

// 訊息控制函式

#include #include #include int msgctl(int msqid, int cmd, struct msqid_ds *buf);

服務端:

#include #include #include #include #include #include #include #include #include #define msg_file "server.c"  

#define buffer 255

/*s_irusr

permits the file's owner to read it.

s_iwusr

permits the file's owner to write to it.

s_irgrp

permits the file's group to read it.

s_iwgrp

permits the file's group to write to it.

*/#define perm s_irusr|s_iwusr

struct msgtype ;

int main()

// 建立訊息佇列

if((msgid=msgget(key,perm|ipc_creat|ipc_excl))==-1)

while(1)

exit(0);

}

客戶端:

#include #include #include #include #include #include #include #include #define msg_file "server.c"  

#define buffer 255

#define perm s_irusr|s_iwusr

struct msgtype ;

int main(int argc,char **argv)

if((key=ftok(msg_file,'a'))==-1)

if((msgid=msgget(key,perm))==-1)

msg.mtype=1;

strncpy(msg.buffer,argv[1],buffer);

msgsnd(msgid,&msg,sizeof(struct msgtype),0);

memset(&msg,'\0',sizeof(struct msgtype));

msgrcv(msgid,&msg,sizeof(struct msgtype),2,0);

fprintf(stderr,"client receive:%s\n",msg.buffer);

exit(0);

}

linux訊息佇列 Linux訊息佇列

訊息佇列,unix的通訊機制之一,可以理解為是乙個存放訊息 資料 容器。將訊息寫入訊息佇列,然後再從訊息佇列中取訊息,一般來說是先進先出的順序。可以解決兩個程序的讀寫速度不同 處理資料速度不同 系統耦合等問題,而且訊息佇列裡的訊息哪怕程序崩潰了也不會消失。最簡單的訊息記憶體的使用流程 ftok函式生...

linux訊息佇列

訊息佇列是核心位址空間中的內部鍊錶,每個訊息佇列都在系統範圍內對應唯一的鍵值,所以,要獲得乙個訊息佇列的描述字,只需提供該訊息佇列的鍵值即可。1 訊息緩衝區結構 存放訊息資料的模板,可在基本定義的基礎上自己定義 在include linux msg.h中宣告,描述如下 struct 可以定義自己的例...

linux 訊息佇列

一 訊息佇列的基本概念 訊息佇列 也叫做報文佇列 是unix系統v版本中3種程序間通訊機制之一。另外兩種是訊號燈和共享記憶體。這些ipc機制使用共同的授權方法。只有通過系統呼叫將標誌符傳遞給核心之後,程序才能訪問這些資源。這種系統ipc物件使用的控制方法和檔案系統非常類似。使用物件的引用標誌符作為資...