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...