嵌入式操作系统任哲第十九章消息队列

本文展示了一个使用消息队列进行进程间通信的C语言示例。通过创建消息队列,父进程向队列发送消息mytestinfo,子进程从队列中接收并显示该消息,最后删除消息队列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<sys/types.h>
#include<sys/ipc.h>
#include<stdio.h>
#include<sys/msg.h>
#include<string.h>
#include<stdlib.h>
int main()
{
	int pid,msqid;
	struct msgbuf
	{
		long mtype;
		char mtext[20];
	}send_buf,recv_buf;
	if((msqid = msgget(IPC_PRIVATE,0700))<0)
	{
		printf("消息队列创建失败\n");
		exit(1);
	}
else
	printf("消息队列创建成功其识别代码为%d。\n",msqid);
if ((pid = fork())<0)
{
	printf("创建fork()失败");
	exit(2);
}
else if(pid > 0)
{
	send_buf.mtype = 1;
	strcpy(send_buf.mtext,"my test info");
	printf("发送到消息队列的内容为:%s\n",send_buf.mtext);
	if(msgsnd(msqid,&send_buf,20,IPC_NOWAIT)<0)
	{
		printf("msgsnd消息发送失败。\n");
		exit(3);
	}
	else
		printf("消息发送成功。\n");
	sleep(2);
	exit(0);
}
else
{
	sleep(2);
	int infolen;
	if((infolen = msgrcv(msqid,&recv_buf,20,0,IPC_NOWAIT))<0)
	{
		printf("msgrcv读取错误。\n");
		exit(4);
	}
	else
		printf("msgrcv读取成功。\n");
	printf("自消息队列读到内容为%s,共读取%d个字符\n",recv_buf.mtext,infolen);
	if((msgctl(msqid,IPC_RMID,NULL))<0)
	{
		printf("msgctl调用错误。\n");
		exit(5);
	}
	else
	{
		printf("识别代号为%d的消息队列已经成功删除。\n",msqid);
		exit(0);
	}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值