Linux訊息佇列

2021-06-21 04:51:38 字數 1669 閱讀 5781

linux作業系統system v程序間通訊,主要有三種:

1、訊息佇列;

2、訊號量;

3、記憶體共享。

訊息佇列是訊息的鍊錶,存放在核心中並由訊息佇列識別符號標識。

linux訊息佇列管理:

1、建立訊息佇列

在使用乙個訊息佇列前,需要使用msgget函式建立該訊息佇列,其函式宣告:

extern int magget(key_t _key,int _msg***) _throw;

第乙個引數key由ftok建立的key值;

第二個引數_msg***的低位用來確定訊息佇列的訪問許可權。

2、傳送訊息到訊息佇列

extern int msgsnd(int _msqid , _const void * _msgq, size_t _msgsz , int _msg*** );

第乙個引數msgid為指定的訊息佇列識別符號(由msgget生成的訊息佇列識別符號),即將訊息新增到哪個訊息佇列中。

第二個引數msgq為指向的使用者定義緩衝區。

第三個引數為接收訊息的大小,其資料型別為:size_t,即unsigned int型別。其大小為0到系統對訊息佇列的限制值。

第四個引數用來執行在達到系統為訊息佇列所定的界限(如達到字數限制)時應採取的操作。

3、從訊息佇列接收資訊

extern int msgrcv(int _msgid, void * _msgq,size_t _msgsz,long int _msgtyp,int _msg***);

第乙個引數為讀的物件,即從哪個訊息佇列獲取資訊。

第二個引數為乙個臨時訊息資料結構,用來儲存讀取的資訊。

現在,利用fork函式,建立乙個子程序,並在子程序中利用訊息佇列的方式傳送資訊,在父程序中,接收訊息。

c**  

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#define max_text 512 

struct msg_st 

//訊息佇列的結構體 

; int main(int argc,char **argv) 

else if ( pid == 0) 

//子程序 

printf("enter the mssage to send:"); 

fgets(buffer,bufsiz,stdin); 

some_data.my_msg_type = 1; 

strcpy(some_data.msg_text,buffer); 

if((msgsnd(msgid,(void *) &some_data,max_text,0)) == -1) 

return 0; 

} else 

//父程序 

if(msgrcv(msgid1,(void *) & some_data1,bufsiz,msg_to_recevie , 0) == -1) 

printf("recevier mssage : %s",some_data1.msg_text); 

if(msgctl(msgid1,ipc_rmid,0) == -1) 

return 0; } }

linux訊息佇列 Linux訊息佇列

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

linux訊息佇列

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

linux 訊息佇列

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