訊息佇列存在於linux核心中,可以使資料雙向流動
資料在核心中,即使程序結束資料依然存在
訊息佇列實際上是訊息鍊錶,每個佇列都有自己的識別符號
msgget
建立乙個訊息佇列
1.原函式
#include #include #include int msgget(key_t key, int msg***);
2. 示例:
key_t key;
key =
ftok
("."
,'z');
int msgid =
msgget
(key,ipc_creat|
0777
);
msgsnd 和 msgrcv
傳送/接受資料到訊息佇列
1.原函式
#include #include #include int msgsnd(int msqid, const void *msgp, size_t msgsz, int msg***);
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msg***);
其中msgp預設結構體如下:
struct msgbuf ;
2.示例
struct msgbuf
;struct msgbuf sendbuf =
;struct msgbuf readbuf;
msgrcv
(msgid,
&readbuf,
sizeof
(readbuf.mtext)
,888,0
);msgsnd
(msgid,
&sendbuf,
strlen
(sendbuf.mtext),0
);
msgctl
控制訊息佇列
1.原函式
#include #include #include int msgctl(int msqid, int cmd, struct msqid_ds *buf);
其中msqid_ds預設結構體如下:
struct msqid_ds ;
程式1:
#include
#include
#include
#include
#include
struct msgbuf
;int
main()
;struct msgbuf readbuf;
key_t key;
key =
ftok
("."
,'z');
//獲取key值
printf
("key=%x\n"
,key)
;int msgid =
msgget
(key,ipc_creat|
0777);
//建立訊息佇列
if(msgid ==-1
)msgsnd
(msgid,
&sendbuf,
strlen
(sendbuf.mtext),0
);//向訊息佇列888傳送資料
msgrcv
(msgid,
&readbuf,
sizeof
(readbuf.mtext)
,988,0
);//從訊息佇列988接受資料
printf
("return from get:%s\n"
,readbuf.mtext)
;msgctl
(msgid,ipc_rmid,
null);
//關閉訊息佇列
return0;
}
程式2:
#include
#include
#include
#include
#include
struct msgbuf
;int
main()
;struct msgbuf readbuf;
key_t key;
key =
ftok
("."
,'z');
//獲取key值
printf
("key=%x\n"
,key)
;int msgid =
msgget
(key,ipc_creat|
0777);
// 建立訊息佇列
if(msgid ==-1
)msgrcv
(msgid,
&readbuf,
sizeof
(readbuf.mtext)
,888,0
);//從訊息佇列888接受資料
printf
("read from que:%s\n"
,readbuf.mtext)
;msgsnd
(msgid,
&sendbuf,
strlen
(sendbuf.mtext),0
);//向訊息佇列988傳送資料
msgctl
(msgid,ipc_rmid,
null);
//關閉訊息佇列
return0;
}
執行效果:
開啟任意程式後訊息佇列阻塞,等待另外乙個程式將所需資料錄入,開啟另外一程式後兩程式達到訊息通訊的目的。
linux 訊息佇列相關
ipcs u ipcs l 原型 int msgget key t key,int msg 引數 key 可以認為是乙個埠號,也可以由函式ftok生成。msg ipc creat值,若沒有該佇列,則建立乙個並返回新識別符號 若已存在,則返回原識別符號。ipc excl值,若沒有該佇列,則返回 1 若...
Linux程序通訊 訊息佇列
1.訊息佇列 訊息佇列也稱為報文佇列,訊息佇列是隨核心持續的,只有在核心重起或顯示刪除乙個訊息佇列時,該訊息佇列才會真正刪除 系統中記錄訊息佇列的資料結構struct ipc ids msg ids位於核心中,系統中所有訊息佇列都可以在結構msg ids中找到訪問入口 訊息佇列其實就是乙個訊息的鍊錶...
linux訊息佇列程序通訊
訊息佇列 也叫做報文佇列 是unix系統v版本中3種程序間通訊機制之一。另外兩種是訊號燈和共享記憶體。這些ipc機制使用共同的授權方法。只有通過系統呼叫將標誌符傳遞給核心之後,程序才能訪問這些資源。這種系統ipc物件使用的控制方法和檔案系統非常類似。使用物件的引用標誌符作為資源表中的索引。訊息佇列就...