你的位置:主页 > 体育在线新闻 >

进程间通信之

2020-07-15 | 人围观

  参数

  描述

  key

  可以认为是一个端口号,也可以由函数ftok生成

  msgflg

  标识,可以取IPC_CREAT或者IPC_EXCL

  参数

  描述

  msqid

  消息队列的标识码

  msgp

  指向消息缓冲区的指针,此位置用来暂时存储发送和接收的消息,是一个用户可定义的通用结构,

  msgsz

  消息的大小

  msgtyp

  从消息队列内读取的消息形态。如果值为零,则表示消息队列中的所有消息都会被读取。否则只接收相同类型的消息

  msgflg

  用来指明核心程序在队列没有数据的情况下所应采取的行动。

  

  这里主要说明一下消息类型是怎么一回事

  注意msg_receive.c文件main函数中定义的变量msgtype(注释为注意1),它作为msgrcv函数的接收信息类型参数的值,其值为0,表示获取队列中第一个可用的消息。

  再来看看msg_send.c文件中while循环中的语句data.msg_type=1(注释为注意2),它用来设置发送的信息的信息类型,即其发送的信息的类型为1。所以程序msg_receive能够接收到程序msg_send发送的信息。

  msgtype如果值为零,则表示消息队列中的所有消息都会被读取。否则只接收相同类型的消息

  如果把注意1,即msg_receive.c文件main函数中的语句由long int msgtype=0;改变为long int msgtype=2;会发生什么情况,msgreceive将不能接收到程序msgsend发送的信息。因为在调用msgrcv函数时,如果msgtype(第四个参数)大于零,则将只获取具有相同消息类型的第一个消息,修改后获取的消息类型为2,而msgsend发送的消息类型为1,所以不能被msgreceive程序接收。

标签:
Top