Posix訊息佇列

2021-07-10 21:31:57 字數 1083 閱讀 9089

posix訊息佇列與system v訊息佇列的主要差別:

1)對posix訊息佇列的讀總是返回最高優先順序的最早訊息,對system v訊息佇列的讀則可以返回任意指定優先順序的訊息;

2)當往乙個空佇列放置乙個訊息時,posix訊息佇列允許產生乙個訊號或啟動乙個執行緒,system v訊息佇列則不提供類似機制。

#include

mqd_t  mq_open(const  char  *name,  int  oflag,  ... /* mode_t mode, struct  mq_attr *attr  */);

成功返回訊息佇列描述符,失敗返回-1;

int  mq_close(mqd_t  mqdes);//成功返回0,出錯-1

int  mq_unlink(const  char  *name);//成功返回0,出錯-1

引用計數為0時方能真正刪除

int  mq_getattr(mqd_t  mqdes,  struct  mq_attr  *attr);

int  mq_setattr(mqd_t  mqdes,  const  struct  mq_attr  *attr,  struct  mq_attr  *oattr);

mq_attr結構含有以下屬性

struct  mq_attr */

int sigev_signo;/* sinal number if sigev_signal */

uinon  sigvalsigev_value;/* passed to signal handler  or thread*/

/* following two if sigev_thread */

void (*sigev_notify_function)(union  sigval);

pthread_attr_t*sigev_notify_attributes;

posix訊息佇列允許非同步事件通知(asynchronous event notification),以告知何時有乙個訊息放置到了某個空訊息佇列中,這種通知(可以通過mq_notify建立)有兩種方式可供選擇:

1)產生乙個訊號

2)建立乙個執行緒來執行乙個指定的函式

POSIX訊息佇列

訊息佇列可認為是乙個訊息鍊錶,有寫許可權的執行緒可以往訊息佇列中寫訊息,有讀許可權的執行緒可以從佇列中讀取訊息,從而實現資料共享。每個訊息都是一條記錄,具有以下屬性 優先順序 無符號整數或長整數型別 訊息的資料部分長度 資料本身。1 相關函式 標頭檔案 include 建立和開啟 mqd t mq ...

posix 訊息佇列

posix 訊息佇列 訊息佇列的使用 1.建立訊息佇列mq open const char name,int oflag,mode t mode,struct mq attr attr name 訊息佇列的名稱,以 開頭 oflag 標誌,o rdonly 唯讀 o wronly 只寫 o rdwr...

POSIX訊息佇列

訊息佇列可以認為是乙個鍊錶。程序 執行緒 可以往裡寫訊息,也可以從裡面取出訊息。乙個程序可以往某個訊息佇列裡寫訊息,然後終止,另乙個程序隨時可以從訊息佇列裡取走這些訊息。這裡也說明了,訊息佇列具有隨核心的持續性,也就是系統不重啟,訊息佇列永久存在。3.2.1 建立 並開啟 關閉 刪除乙個訊息佇列 i...