C语言消息队列--基本操作


#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/types.h>
#include <error.h>
#define BUF_SIZE 128

struct mymsg
{
	long mtype;
	char mtext[BUF_SIZE];
};

void send_msg(int msgid,struct mymsg msgbuf);
void receive_msg(int msgid,struct mymsg *qbuf,long type);
void del_msg(int msgid);

int get_key()
{
	int key;
	key=ftok(".",'s');
}

int main()
{
	struct mymsg msgbuf;
	key_t key;
	int msgid;
	key=get_key();
	if(key<0)
	{
		perror("get key error");
		exit(1);
	}
	msgid=msgget(key,IPC_CREAT|0644);
	if(msgid<0)
	{
		perror("msgget error");
		exit(1);
	}
	printf("get msg success\n");
	send_msg(msgid,msgbuf);
	receive_msg(msgid,&msgbuf,0);
	del_msg(msgid);
}

void send_msg(int msgid,struct mymsg msgbuf)//发送消息
{	
	printf("enter the msg text\n");
	fgets(msgbuf.mtext,BUF_SIZE,stdin);//消息的内容
	msgbuf.mtype=1;//消息的类型
	//int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
	if(msgsnd(msgid,(void *)&msgbuf,BUF_SIZE,0)==-1)
	{
		perror("send msg error");
		exit(1);
	}
	printf("send msg success\n");
}

void receive_msg(int msgid,struct mymsg *qbuf,long type)
{
	printf("正在接收消息\n");
	//ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);
	if(msgrcv(msgid,qbuf, BUF_SIZE,type,IPC_NOWAIT)==-1)
	{
		printf("rcv msg error\n");
		exit(1);
	}
	else printf("Type:%ld,Text:%s",qbuf->mtype,qbuf->mtext);
}

void del_msg(int msgid)
{
	if(msgctl(msgid,IPC_RMID,0)==-1)
	{
		perror("rm msg error");
		exit(1);
	}
}


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值