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();
}
运行时打开两个终端,先运行接受程序,再运行发送程序。