linux提供了壹系列消息隊列的函數接口來讓我們方便地使用它來實現進程間的通信。它的用法與其他兩個system
v
pic機制,即信號量和***享內存相似。
1、msgget函數
該函數用來創建和訪問壹個消息隊列。它的原型為:
int
msgget(key_t,
key,
int
msgflg);
與其他的ipc機制壹樣,程序必須提供壹個鍵來命名某個特定的消息隊列。msgflg是壹個權限標誌,表示消息隊列的訪問權限,它與文件的訪問權限壹樣。msgflg可以與ipc_creat做或操作,表示當key所命名的消息隊列不存在時創建壹個消息隊列,如果key所命名的消息隊列存在時,ipc_creat標誌會被忽略,而只返回壹個標識符。
它返回壹個以key命名的消息隊列的標識符(非零整數),失敗時返回-1.
msgsnd函數
該函數用來把消息添加到消息隊列中。它的原型為:
int
msgsend(int
msgid,
const
void
*msg_ptr,
size_t
msg_sz,
int
msgflg);
msgid是由msgget函數返回的消息隊列標識符。
msg_ptr是壹個指向準備發送消息的指針,但是消息的數據結構卻有壹定的要求,指針msg_ptr所指向的消息結構壹定要是以壹個長整型成員變量開始的結構體,接收函數將用這個成員來確定消息的類型。所以消息結構要定義成這樣:
struct
my_message{
long
int
message_type;
/*
the
data
you
wish
to
transfer*/
};
msg_sz是msg_ptr指向的消息的長度,註意是消息的長度,而不是整個結構體的長度,也就是說msg_sz是不包括長整型消息類型成員變量的長度。
msgflg用於控制當前消息隊列滿或隊列消息到達系統範圍的限制時將要發生的事情。
如果調用成功,消息數據的壹分副本將被放到消息隊列中,並返回0,失敗時返回-1.