linux 訊息佇列 例項

2021-09-01 10:57:19 字數 2194 閱讀 1866

訊息佇列就是乙個訊息的鍊錶。可以把訊息看作乙個記錄,具有特定的格式以及特定的優先順序。對訊息佇列有寫許可權的程序 可以向其中按照一定的規則新增新訊息;對訊息佇列有讀許可權的程序則可以從訊息佇列中讀走訊息。

原型:int msgget(key_t key, int msg***);

引數:

key:可以認為是乙個埠號,也可以由函式ftok生成。

msg***:ipc_creat值,若沒有該佇列,則建立乙個並返回新識別符號;若已存在,則返回原識別符號。

ipc_excl值,若沒有該佇列,則返回-1;若已存在,則返回0。

原型:ssize_t  msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msg***);

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

引數:

msqid:訊息佇列的標識碼

msgp:指向訊息緩衝區的指標,此位置用來暫時儲存傳送和接收的訊息,是乙個使用者可定義的通用結構,形態如下:  

[cpp]view plain

copy

print?

struct  msgstru   

;  

msgsz:訊息的大小。

msgtyp:從訊息佇列內讀取的訊息形態。如果值為零,則表示訊息佇列中的所有訊息都會被讀取。msg***:用來指明核心程式在佇列沒有資料的情況 下所應採取的行動。如果msg***和常數ipc_nowait合用,則在msgsnd()執行時若是訊息佇列已滿,則msgsnd()將不會阻塞,而會 立即返回-1,如果執行的是msgrcv(),則在訊息佇列呈空時,不做等待馬上返回-1,並設定錯誤碼為enomsg。當msg***為0 時,msgsnd()及msgrcv()在佇列呈滿或呈空的情形時,採取阻塞等待的處理模式。

原型:int msgctl ( int msgqid, int cmd, struct msqid_ds *buf );

引數:msgctl 系統呼叫對 msgqid 標識的訊息佇列執行 cmd 操作,系統定義了 3 種 cmd 操作: ipc_stat , ipc_set , ipc_rmid

ipc_stat : 該命令用來獲取訊息佇列對應的 msqid_ds 資料結構,並將其儲存到 buf 指定的位址空間。

ipc_set : 該命令用來設定訊息佇列的屬性,要設定的屬性儲存在buf中。     

ipc_rmid : 從核心中刪除 msqid 標識的訊息佇列。

[cpp]view plain

copy

print?

/*receive.c */

#include 

#include 

#include 

#include 

#include 

#define msgkey 1024

struct  msgstru  

;  

/*子程序,監聽訊息佇列*/

void  childproc()  

/*接收訊息佇列*/

ret_value = msgrcv(msgid,&msgs,sizeof ( struct  msgstru),0,0);  

printf("text=[%s] pid=[%d]\n" ,msgs.msgtext,getpid());  

}  

return ;  

}  

void  main()  

}  

[cpp]view plain

copy

print?

/*send.c*/

#include 

#include 

#include 

#include 

#include 

#define msgkey 1024

struct  msgstru  

;  

main()  

}   

while  (1)  

}  

msgctl(msqid,ipc_rmid,0); //刪除訊息佇列

linux訊息佇列 Linux訊息佇列

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

linux訊息佇列

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

linux 訊息佇列

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