文档介绍:MSG
一、 实验目的
1、 了解什么是消息
2、 熟悉消息传送的机理。
二、 实验内容
消息的创建、发送和接收。使用系统调用
msgget ( ) , msgsnd( ), msgrev(),及 msgctl ()编制一长度为 1 k 的消息发送和 接收的程序
三、 实验内容指导提示
、什么是消息
消息(message)是一个格式化的可变长的信息单元。消息机制允许由一个进程给其它 任意的进程发送一个消息。当一个进程收到多个消息时,可将它们排成一个消息队列。消息 使用二种重要的数据结构:一是消息首部,其中记录了一些与消息有关的信息,如消息数据 的字节数;二个消息队列头表,其每一表项是作为一个消息队列的消息头,记录了消息队列 的有关信息。
1、消息机制的数据结构
消息首部
记录一些与消息有关的信息,如消息的类型、大小、 的链接指针等。
消息队列头表
其每一项作为一个消息队列的消息头,记录了消息队列的有关信息如指向消息队列中第
一个消息和指向最后一个消息的指针、队列中消息的数目、队列中消息数据的总字节数、
队列所允许消息数据的最人字节总数,还有最近一次执行发送操作的进程标识符和时
河、最近一次执行接收操作的进程标识符和时间等。
2、消息队列的描述符
UNIX中,每一个消息队列都有一个称为关键字(key)的名字,是由用户指定的:消 息队列有一消息队列描述符,其作用与用户文件描述符一样,也是为了方便用户和系统 对消息队列的访问。
、涉及的系统调用
1- msgget()
创建一个消息,获得一个消息的描述符。核心将搜索消息队列头表,确定是否有指定名 字的消息队列。若无,核心将分配一新的消息队列头,并对它进行初始化,然后给用户返回 一个消息队列描述符,否则它只是检查消息队列的许可权便返回。
系统调用格式:
msgqid=nisgget()
该函数使用头文件如下:
#include<sys/>
#include<sys/ipc .h>
参数定义
#include<sys/> mt msgget(kev,flag)
key_t key; bit flag;
其中:
kev是用户指定的消息队列的名字皿ag是用户设置的标志和访问方式。 |0400 是否该队列已被创建。无则创建,是则打开;
IPC_EXCL |0400 是否该队列的创建应是互斥的。
msgqid是该系统调用返回的描述符,失败则返回“。
2. msgsnd ()
发送一消息。向指定的消息队列发送一个消息,并将该消息链接到该消息队列的尾部。 系统调用格式:
msgsnd(nisgqid,msgp,^)
该函数使用头文件如下:
^include <sys/>
^include <sys/>
^include <sys/>
参数定义:
mt msgsnd(msgqid4iisgp,size,flag)
I iiit nisgqid,size,flag; struct mssbuf * nisgp;
其中msgqid是返回消息队列的描述符:msgp是指向用户消息缓冲区的一个结构体指针