进程间通信

1.了解什么是消息

2.熟悉消息传送的机理

消息是一个格式化的可变长的消息单元,消息机制允许一个进程给其他人任意的进程发送一个消息。当一个进程收到多个消息时,可将它们排成一个消息队列。

3.所使用的系统函数

msgget()
获得一个消息的描述符,该描述符指定一个消息队列以便于其他系统调用。如果创建一个新的消息队列,或者希望存取一个已经存在的消息队列,也可以使用系统调用msgget()。
msgget()
原型 int msgget(key-t key, int msgflag)
msgget(888,IPC_CREAT|0660)
创建一个key = 888且属主和同组可读写消息队列。
msgsnd()
发送一消息。向指定的消息队列发送一个消息,并将该消息链接到该消息队列的尾部。
原型 int msgsnd(msgqid,msgp,size,flag)
int msgqid,size,flag;
struct msgbuf * msgp;

msgrcv()
接受一信息
从指定的消息队列中接受指定类型的消息。

msgctl()
消息队列的操纵,读取消息队列的状态信息并进行修改,如查询消息队列描述符,修改它的许可权及删除该队列等。

4.代码部分

1.发送消息程序

#include<sys/types.h>
#include<sys/msg.h>
#include<sys/ipc.h>
#include<stdio.h>
#include<stdlib.h>
#define MSGKEY 75
struct msgform
{
	long mtype;
	char mtext[1024];
}msg;
int msgqid;

void client()
{
	int i;
	msgqid=msgget(MSGKEY,0666);/*打开75#消息队列*/

	for(i=10;i>=1;i--)
	{
		msg.mtype=i;
		printf("(clinet)sent\n");
		msgsnd(msgqid,&msg,1024,0);
	}
	exit(0);
}
main()
{
	client();
}

2.接收消息程序

#include<sys/types.h>
#include<sys/msg.h>
#include<sys/ipc.h>
#include<stdio.h>
#include<stdlib.h>
#define MSGKEY 75
struct msgform
{
	long mtype;
	char mtext[1000];
}msg;
int msgqid;
void server()
{
	msgqid=msgget(MSGKEY,0777|IPC_CREAT);
	do
	{
		msgrcv(msgqid,&msg,1024,0,0);
		printf("%d: (server)received\n",msg.mtype);
	}while(msg.mtype!=1);
	msgctl(msgqid,IPC_RMID,0);
	exit(0);
}
main()
{
	server();
}

在这里插入图片描述
运行时打开两个终端,先运行接受程序,再运行发送程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值