c語言消息隊列的使用
消息隊列就是由內核負責管理的一個管道,可以按順序發送消息包(消息類型+消息內容),可以全雙工工作,可以不按消息的順序接收消息。
int msgget(key_t key, int msgflg)
功能:創建/獲取消息隊列
key:IPC鍵值,由ftok函數自動生成
msgflg:
0 獲取消息隊列
IPC_CREAT 創建消息隊列
IPC_EXCL 如果存在則創建失敗
返回值:消息隊列標識
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg)
功能:向消息隊列發送消息
msqid:消息隊列標識,msgget函數的返回值
msgp:結構指針
struct msgbuf {
long mtype //消息類型
char mtext[n] //消息內容
}
msgsz:消息的長度,不包括消息類型,sizeof(msgbuf)-4。
msgflg:
0 阻塞,當消息隊列滿時,等待。
IPC_NOWAIT 不阻塞,當消息隊列滿時,不等待。
返回值:成功發送返回0,失敗返回-1。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include "struct.h"
int main()
{
// 創建消息隊列
int msgid = msgget(ftok(".",119),IPC_CREAT|0644)
if(0 > msgid)
{
perror("msgget")
return -1
}
Msg msg = {111}
for()
{
printf(">")
gets()
msgsnd(msgid,&msg,sizeof(Msg)-sizeof(),0)
if(0 == strcmp("quit",))
{
 printf("通信結束!n")
 break
}
}
if(0 > msgctl(msgid,IPC_RMID,NULL))
{
perror("msgctl")
}
}
步驟一、創建消息隊列int msgid = msgget(ftok(".",119),IPC_CREAT|0644)
步驟二、發送消息msgsnd(msgid,&msg,sizeof(Msg)-sizeof(),0)
步驟三、刪除消息隊列if(0 > msgctl(msgid,IPC_RMID,NULL))
-
熱水器屬於硬裝嗎
熱水器不屬於硬裝,硬裝是指固定的、不能移動的裝飾物,除了必須滿足的基礎設施以外,為了滿足房屋的結構、佈局、功能、美觀需要,添加在建築物表面或者內部的一切裝飾物也包括色彩,這些裝飾物原則上是不可移動的,主要包括電線,水管,隔牆,,房門,地板,瓷磚,櫥櫃,潔具,廚具,燈具等等...
-
龍湖青雲闕的樓為什麼要斜着蓋
因為這種樓是種特殊的結構型式。南向低北向高。從南開始往北層層升高。有把這種樓戲稱步步高昇樓型。外觀上比較有吸引性,觀賞性也不錯。明顯優勢是採光條件相當充沛。每層提升幅度特別大。出現了更多的通天普照的頂層樓。這種摟都是斜蓋的。...
-
年宵牡丹都有哪些顏色呢
年宵牡丹花的花色豐富,主要以大紅色、粉紅色、黃色、紫色、白色、藍色為主,除此之外,還有夜光白、豆綠色、藍田玉、姚黃色、首案紅等稀有的顏色。...
-
巖石和牛的品質
巖石和牛是當今世界公認的品質最優秀的良種肉牛,其肉大理石花紋明顯,又稱“雪花肉”。由於巖石和牛的肉多汁細嫩、風味獨特,肌肉脂肪中飽和脂肪酸含量很低、營養價值極高,因而在日本被視為“國寶”,在西歐市場也極其昂貴。...