2024年4月17日发(作者:)

MSG

一、实验目的

1、了解什么是消息

2、熟悉消息传送的机理。

二、实验内容

消息的创建、发送和接收。使用系统调用msgget( ),msgsnd( ),msgrev( ),及msgctl( )

编制一长度为1k的消息发送和接收的程序

三、实验内容指导提示

(一)、什么是消息

消息(message)是一个格式化的可变长的信息单元。消息机制允许由一个进程给其

它任意的进程发送一个消息。当一个进程收到多个消息时,可将它们排成一个消息队列。

消息使用二种重要的数据结构:一是消息首部,其中记录了一些与消息有关的信息,如消

息数据的字节数;二个消息队列头表,其每一表项是作为一个消息队列的消息头,记录了

消息队列的有关信息。

1、消息机制的数据结构

(1)消息首部

记录一些与消息有关的信息,如消息的类型、大小、指向消息数据区的指针、消息队

列的链接指针等。

(2)消息队列头表

其每一项作为一个消息队列的消息头,记录了消息队列的有关信息如指向消息队列中

第一个消息和指向最后一个消息的指针、队列中消息的数目、队列中消息数据的总字节数、

队列所允许消息数据的最大字节总数,还有最近一次执行发送操作的进程标识符和时间、

最近一次执行接收操作的进程标识符和时间等。

2、消息队列的描述符

UNIX中,每一个消息队列都有一个称为关键字(key)的名字,是由用户指定的;消

息队列有一消息队列描述符,其作用与用户文件描述符一样,也是为了方便用户和系统对

消息队列的访问。

(二)、涉及的系统调用

1. msgget( )

创建一个消息,获得一个消息的描述符。核心将搜索消息队列头表,确定是否有指定

名字的消息队列。若无,核心将分配一新的消息队列头,并对它进行初始化,然后给用户

返回一个消息队列描述符,否则它只是检查消息队列的许可权便返回。

系统调用格式: