当前位置:淳美吧 > 智慧生活 > 心理 > c语言消息队列的使用
手机版

c语言消息队列的使用

来源:淳美吧 阅读:2.19W 次
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))

本文链接:https://www.chunmeiba.com/zhihuishenghuo/xinli/vd33e8.html

Copyright © 2024. 淳美吧 All right reserved. 浙ICP备20204785号-2

文字美图素材,版权属于原作者。部分文章内容由网友提供推送时因种种原因未能与原作者联系上,若涉及版权问题,敬请原作者联系我们,立即处理。