posix訊息佇列的屬性使用如下結構存放:struct
mq_attr
; 佇列可以在建立時由mq_open()函式的第四個引數指定mq_maxmsg,mq_msgsize。 如建立時沒有指定則使用預設值,一旦建立,則不可再改變。
佇列可以在建立後由mq_setattr()函式設定mq_flags
#include
/*取得訊息佇列屬性,放到mqstat地fh
*/int mq_getattr(mqd_t mqdes, struct mq_attr *mqstat);
/*設定訊息佇列屬性,設定值由mqstat提供,原先值寫入omqstat
*/int mq_setattr(mqd_t mqdes, const
struct mq_attr *mqstat, struct mq_attr *omqstat);
均返回:若成功則為0,若出錯為-1
程式獲取和設定訊息佇列的預設屬性:
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 910#define mq_name ("/tmp")
11#define mq_flag (o_rdwr | o_creat | o_excl) //
建立mq的flag
12#define file_mode (s_irusr | s_iwusr | s_irgrp | s_iroth) //
設定建立mq的許可權
1314
intmain()
15
2829
//獲取訊息佇列的預設屬性
30 rc = mq_getattr(posixmq, &mqattr);
31if(-1 ==rc)
32
3637 printf("
佇列阻塞標誌位:%ld\n
", mqattr.mq_flags);
38 printf("
佇列允許最大訊息數:%ld\n
", mqattr.mq_maxmsg);
39 printf("
佇列訊息最大位元組數:%ld\n
", mqattr.mq_msgsize);
40 printf("
佇列當前訊息條數:%ld\n
", mqattr.mq_curmsgs);
4142 rc =mq_close(posixmq);
43if(0 !=rc)
44
4849 rc =mq_unlink(mq_name);
50if(0 !=rc)
51
55return
0;
56 }
編譯並執行:
1 root@linux:/mnt/hgfs/c_libary# gcc -o attrmq attrmq.c -lrt2 root@linux:/mnt/hgfs/c_libary# ./attrmq
3 佇列阻塞標誌位:0
4 佇列允許最大訊息數:10
5 佇列訊息最大位元組數:8192
6 佇列當前訊息條數:0
7 root@linux:/mnt/hgfs/c_libary#
設定訊息佇列的屬性:
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 910#define mq_name ("/tmp")
11#define mq_flag (o_rdwr | o_creat | o_excl) //
建立mq的flag
12#define file_mode (s_irusr | s_iwusr | s_irgrp | s_iroth) //
設定建立mq的許可權
1314
intmain()
15
3233 mqattr.mq_flags = 0
; 34 mq_setattr(posixmq, &mqattr, null);//
mq_setattr()只關注mq_flags,adw
3536
//獲取訊息佇列的屬性
37 rc = mq_getattr(posixmq, &mqattr);
38if(-1 ==rc)
39
4344 printf("
佇列阻塞標誌位:%ld\n
", mqattr.mq_flags);
45 printf("
佇列允許最大訊息數:%ld\n
", mqattr.mq_maxmsg);
46 printf("
佇列訊息最大位元組數:%ld\n
", mqattr.mq_msgsize);
47 printf("
佇列當前訊息條數:%ld\n
", mqattr.mq_curmsgs);
4849 rc =mq_close(posixmq);
50if(0 !=rc)
51
5556 rc =mq_unlink(mq_name);
57if(0 !=rc)
5862
63return
0;
64 }
編譯執行:
1 root@linux:/mnt/hgfs/c_libary# gcc -o setattrmq setattrmq.c -lrt2 root@linux:/mnt/hgfs/c_libary# ./setattrmq
3 佇列阻塞標誌位:0
4 佇列允許最大訊息數:5
5 佇列訊息最大位元組數:8192
6 佇列當前訊息條數:0
IPC通訊 Posix訊息佇列的建立,關閉,刪除
訊息佇列可以認為是乙個鍊錶。程序 執行緒 可以往裡寫訊息,也可以從裡面取出訊息。乙個程序可以往某個訊息佇列裡寫訊息,然後終止,另乙個程序隨時可以從訊息佇列裡取走這些訊息。這裡也說明了,訊息佇列具有隨核心的持續性,也就是系統不重啟,訊息佇列永久存在。建立 並開啟 關閉 刪除乙個訊息佇列 1 inclu...
程序間通訊 posix 訊息佇列
posix訊息佇列 訊息佇列可以認為是乙個訊息鍊錶,某個程序往乙個訊息佇列中寫入訊息之前,不需要另外某個程序在該佇列上等待訊息的達到,這一點與管道和fifo相反。posix訊息佇列與system v訊息佇列的區別如下 對posix訊息佇列的讀總是返回最高優先順序的最早訊息,對system v訊息佇列...
程序間通訊 IPC 訊息佇列
訊息佇列是訊息的鏈結表,儲存在核心中,由訊息佇列識別符號標識。有足夠寫許可權的程序可往佇列中放置訊息,有足夠讀許可權的程序可從佇列中取走訊息。posix 和 system v 下的訊息佇列略有不同,主要體現在一下幾個方面 這裡我們以 posix 下的訊息隊列為例來進行講解。訊息佇列的建立 訊息佇列的...