靚麗時尚館

位置:首頁 > 健康生活 > 心理

c語言消息隊列的使用

心理2.04W
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 &ltstdio.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))

標籤:語言 隊列