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絕對值的所有消息中的最小一個消息.