天天看點

Linux IPC- 消息隊列

SystemV消息隊列 為了便于程序之間通信,我們可以使用管道通信 SystemV也提供了一些函數來實作程序的通信.這就是消息隊列.

#include <sys/msg.h>

int msgget(key_t key,int msgflg);

int msgsnd(int msgid,struct msgbuf *msgp,int msgsz,int msgflg);

int msgrcv(int msgid,struct msgbuf *msgp,int msgsz,

long msgtype,int msgflg);

int msgctl(Int msgid,int cmd,struct msqid_ds *buf);

struct msgbuf {

long msgtype;

.......

msgget函數和semget一樣,傳回一個消息隊列的标志.

msgctl和semctl是對消息進行控制.

msgsnd和msgrcv函數是用來進行消息通訊的.

msgid是接受或者發送的消息隊列标志.

msgp是接受或者發送的内容.msgsz是消息的大小.

結構msgbuf包含的内容是至少有一個為msgtype.其他的成分是使用者定義的.

對于發送函數msgflg指出緩沖區用完時候的操作.接受函數指出無消息時候的處理.一般為0.接收函數msgtype指出接收消息時候的操作.

如果msgtype=0,接收消息隊列的第一個消息.大于0接收隊列中消息類型等于這個值的第一個消息.小于0接收消息隊列中小于或者等于msgtype絕對值的所有消息中的最小一個消息.

繼續閱讀