进程的消息通信-带标准答案版
(完整版)第三章进程同步与通信作业习题与答案

第三章一.选择题(50题)1.以下_B__操作系统中的技术是用来解决进程同步的。
A.管道B.管程C.通道D.DMA2.以下_B__不是操作系统的进程通信手段。
A.管道B.原语C.套接字D.文件映射3.如果有3个进程共享同一程序段,而且每次最多允许两个进程进入该程序段,则信号量的初值应设置为_B__。
A.3B.2C.1D.04.设有4个进程共享一个资源,如果每次只允许一个进程使用该资源,则用P、V 操作管理时信号量S的可能取值是_C__。
A.3,2,1,0,-1B.2,1,0,-1,-2C. 1,0,-1,-2,-3D.4,3,2,1,05.下面有关进程的描述,是正确的__A__。
A.进程执行的相对速度不能由进程自己来控制B.进程利用信号量的P、V 操作可以交换大量的信息C.并发进程在访问共享资源时,不可能出现与时间有关的错误D.P、V操作不是原语操作6.信号灯可以用来实现进程之间的_B__。
A.调度B.同步与互斥C.同步D.互斥7.对于两个并发进程都想进入临界区,设互斥信号量为S,若某时S=0,表示_B_ _。
A.没有进程进入临界区B.有1个进程进入了临界区C. 有2个进程进入了临界区D. 有1个进程进入了临界区并且另一个进程正等待进入8. 信箱通信是一种_B__方式A.直接通信B.间接通信C.低级通信D.信号量9.以下关于临界区的说法,是正确的_C__。
A.对于临界区,最重要的是判断哪个进程先进入B.若进程A已进入临界区,而进程B的优先级高于进程A,则进程B可以打断进程A而自己进入临界区C. 信号量的初值非负,在其上只能做PV操作D.两个互斥进程在临界区内,对共享变量的操作是相同的10. 并发是指_C__。
A.可平行执行的进程B.可先后执行的进程C.可同时执行的进程D.不可中断的进程11. 临界区是_C__。
A.一个缓冲区B.一段数据区C.一段程序D.栈12.进程在处理机上执行,它们的关系是_C__。
(完整版)移动招聘笔试题(附参考标准答案)

中国移动笔试卷+答案智能网试卷一、填空1、( CMIN02 移动智能网系统)是东信北邮信息技术有限公司研制开发的新一代移动智能网产品。
2、( SMP)是移动智能网各业务、用户数据的管理中心,它与SMAP 一起组成了一个用户信息管理网络,完成业务管理、用户管理、网络管理、计费管理、接入管理、系统管理等功能。
3、( SMAP )是提供给业务管理者的一个管理窗口,具有与SMP 的接口,业务管理者可以通过远程接入SMP 来管理业务。
它与MSCP 并不直接相连。
4、( SCP)是整个移动智能网的核心,主要包括移动业务控制功能和业务数据功能两个功能模块。
二、选择1、智能网系统的网络组成单元为:(A.B.C.D.E)A.SCPB. SMPC. VCD. SSPE. IP2、( C)用以存放语音通知,支持文本语音的转换等功能,可根据MSCP 的指示完成放音通知和接收 DTMF 信号的功能。
A . SCP B. SMP C. IP3、( B)是一个物理功能实体,具有基本呼叫处理的功能,负责参与完成移动智能业务有关的交换功能。
A.SCPB. SSPC. SMP4、智能业务所采用的7 号信令协议子层为(A、 B、 C)A. MAP2+B.CAPC. INAPD. ISUP5、 HP 根文件系统的组织中,用以存放配置文件的目录是(B)A./homeB./etcC. /devD. /sbin6、 SMP 为 SMAP 提供服务的进程创建方式( A )A 、动态创建方式B 、静态创建方式7、衡量智能网系统处理能力(每秒处理的呼叫数)的指标为( A )A .忙时 CAPS 数 B. CPU 负荷 C. 充值成功率8、在二卡合一业务中(ABC )可以为 “全球通 ”用户充值。
A. 全球通B. 固定用户C.神州行D. 小灵通9、在以 (A) 方式触发的目标网中,呼叫端局可以直接通过用户的CAMEL签约信息分析和触发VPMN 业务。
计算机四级网络工程师习题库(附参考答案)

计算机四级网络工程师习题库(附参考答案)一、单选题(共80题,每题1分,共80分)1、下列关于生产者消费者的叙述中,哪一个是正确的( )。
A、生产者往缓冲区放产品前要先用B、生产者往缓冲区放产品前要先使用C、生产者往缓冲区放产品前要先使用D、消费者从缓冲区取产品前要先用正确答案:C2、关于XMPP的描述中,正确的是( )。
A、基于XMLB、工作于网络层C、只被微软支持D、腾讯是制定者之一正确答案:A3、关于IM系统的通信协议的描述中,正确的是( )。
A、MSN采用B、323C、QQ采用JABBERD、AOL采用OSCARE、ICQ采用SIMPLE正确答案:C4、关于数据报交换与虚电路交换的描述中,正确的是( )。
A、数据报交换的数据单元中不需要包含源节点与目的节点地址B、虚电路交换需要在源节点与目的节点之间建立一条逻辑连接C、虚电路交换的数据单元中需要包含源节点与目的节点地址D、数据报交换需要在源节点与目的节点之间建立一条物理连接正确答案:B5、关于X.800的描述中,错误的是( )。
A、包含安全服务B、支持可逆加密C、将攻击分为主动和被动攻击D、保证系统的绝对安全正确答案:D6、简单页式存储管理方案中,若地址用 m 个二进制位表示,页内地址部分占 n 个二进制位,则最大允许进程有多少个页面( )。
A、2 mB、2 (m-n)C、2 nD、2 (n-1)正确答案:B7、进程运行过程中,导致进程从运行态转换为就绪态的典型事件是( )。
A、发生了缺页中断B、时间片到C、程序出错D、访问的数据没有准备好正确答案:B8、邮件服务器之间传递邮件通常使用的协议为( )。
A、SNMPB、SMTPC、TelnetD、HTTP正确答案:B9、int main(){Printf("Hello World\n");Fork();Printf("Hello World\n");}在 UNIX 操作系统中正确编译链接后,其正确的运行结果是( )。
进程通信的基本内容

进程通信的基本内容进程通信是指在操作系统中,不同进程之间进行数据交换和信息共享的过程。
在现代操作系统中,进程通信是必不可少的,因为一个系统通常由多个并发运行的进程组成,这些进程之间需要进行协调和合作来实现各种功能。
进程通信的基本内容包括进程创建、数据传输、共享内存和信号等。
首先,进程的创建是进程通信的前提。
在操作系统中,一个进程可以通过创建新的进程来实现与其他进程的通信。
通常,一个进程可以通过调用系统调用fork()或者exec()来创建新的进程。
通过fork()系统调用,当前进程可以创建一个与自己完全相同的子进程,这样子进程就可以直接继承父进程的所有资源和状态。
而通过exec()系统调用,进程可以在创建新进程的同时,将自己的代码和数据替换成新的程序的代码和数据。
其次,进程通信的主要方式是数据传输。
在进程通信中,数据可以通过多种方式进行传输,包括管道、消息队列、共享内存和套接字等。
管道是一种单向的、字节流的通信方式,可以在父子进程之间或者兄弟进程之间进行通信。
消息队列是一种可以在不同进程之间传递消息的通信方式,进程可以通过发送和接收消息来实现通信。
共享内存是一种将内存空间映射到多个进程地址空间的通信方式,不同进程可以直接读写共享内存中的数据。
套接字是一种网络通信的方式,可以在不同主机之间进行进程通信。
另外,进程通信还可以通过共享内存来进行数据共享。
共享内存是一种高效的通信方式,它可以使得多个进程可以直接访问同一块物理内存,而不需要进行数据拷贝。
通过共享内存,不同进程可以在内存中创建共享的数据结构,进程对这些数据结构的读写操作都可以被其他进程所感知。
最后,进程通信还可以通过信号来实现。
信号是一种异步的通信方式,它可以用于进程之间的事件通知和处理。
一个进程可以向另一个进程发送一个信号,另一个进程可以通过注册信号处理函数来处理这个信号。
常见的信号包括SIGINT(中断信号)和SIGTERM(终止信号)等。
操作系统的消息传递和进程间通信实现进程间的信息传递和通信

操作系统的消息传递和进程间通信实现进程间的信息传递和通信操作系统是计算机中非常重要的一个组成部分,它负责管理和控制计算机的硬件和软件资源。
在多道程序设计环境下,操作系统需要负责调度和管理多个进程的执行。
而进程间的信息传递和通信是操作系统中一个关键的功能,它使得不同进程之间能够相互交互、传递数据,从而实现协同工作和资源共享。
本文将探讨操作系统中的消息传递和进程间通信,以及它们的实现方法和技术。
一、消息传递在操作系统中,进程间的信息传递可以通过消息传递的方式来实现。
消息传递是指一个进程向另一个进程发送消息,并由接收进程接收和处理该消息。
消息传递可以用于进程间的同步和通信,从而实现进程之间的交互。
消息传递一般包括以下几个步骤:1. 消息的创建:发送进程首先需要创建一条消息,并在消息中填写相应的内容。
消息可以包含数据、指令等信息,以满足不同的需求。
2. 消息的发送:发送进程将创建好的消息发送给接收进程。
发送进程需要指定接收进程的标识符,以确保消息能够被正确地发送到目标进程。
3. 消息的接收:接收进程通过等待操作等待消息的到达。
当消息到达时,接收进程将检查消息的标识符,以确定该消息是否是自己所期望接收的。
4. 消息的处理:接收进程接收到消息后,会对消息进行处理。
处理的方式取决于消息的内容和接收进程的需求。
消息传递可以有两种方式:直接消息传递和间接消息传递。
直接消息传递是指发送进程直接发送消息给接收进程。
间接消息传递是指通过操作系统的消息队列来传递消息。
不同的方式适用于不同的场景和需求。
二、进程间通信的实现为了实现进程间的信息传递和通信,操作系统提供了多种机制和技术。
以下是几种常见的进程间通信的实现方式:1. 共享内存共享内存是一种在多个进程之间共享同一块物理内存的方式。
通过将一块内存区域映射到多个进程的地址空间中,进程可以通过读写共享内存的方式来进行通信。
共享内存的优点是速度快,但需要进程之间进行同步和互斥操作,以避免数据的冲突和错误。
了解电脑操作系统的进程间通信

了解电脑操作系统的进程间通信电脑操作系统中的进程间通信是指不同进程之间进行数据传递和信息交换的过程。
进程是操作系统中的基本单位,它代表着一个正在运行的程序。
进程间通信的目的是实现多个进程之间的协作和数据共享,从而提高系统的效率和性能。
进程间通信的方式有多种,包括管道、消息队列、信号量、共享内存等。
下面将逐一介绍这些通信方式及其特点。
1. 管道管道是一种半双工的通信方式,它分为无名管道和有名管道。
无名管道只能在具有父子关系的进程之间通信,而有名管道可以在不相关的进程之间通信。
管道的通信方式是通过将数据写入一个进程的输出端,然后由另一个进程从输入端读取数据。
它适用于数据量较小且有顺序要求的通信场景。
2. 消息队列消息队列是一种存放在内核中的消息链表,在发送进程和接收进程之间传递数据。
发送进程将消息发送到队列中,接收进程从队列中读取消息。
消息队列可以实现不相关进程之间的通信,且可以同时处理多个发送和接收操作。
它适用于并发性要求较高的场景。
3. 信号量信号量是一种用于进程间同步和互斥的机制。
通过设置信号量的初值,进程可以通过对信号量进行P(等待)和V(释放)操作来实现对共享资源的互斥访问。
信号量可以用于解决生产者-消费者问题、读者-写者问题等经典的进程同步与互斥问题。
4. 共享内存共享内存是一种进程间共享数据的方法,多个进程可以直接访问同一块内存区域。
进程可以通过读写该内存区域来进行数据的交换和共享。
由于共享内存不涉及内核的切换和数据的拷贝,所以速度较快,但同时也要求进程之间的同步和互斥。
除了上述几种常用的进程间通信方式外,还有其他一些更高级的通信机制,如远程过程调用(RPC)、网络套接字等。
它们可以在不同的计算机之间实现进程间通信,扩展了通信的范围和方式。
在实际应用中,选择何种进程间通信方式取决于具体的业务需求和系统架构。
不同的通信方式有各自的优缺点,需要根据实际情况进行选择。
同时,为了确保通信的正确性和可靠性,应当在设计和实现过程中考虑进程同步、错误处理等因素。
进程间通信常见方法

进程间通信常见方法
进程间通信是操作系统中的重要概念,它涉及不同进程之间的数据传输和信息
共享。
在现代操作系统中,常见的进程间通信方法包括以下几种:
1. 管道:管道是最简单的进程间通信方法之一,适用于具有父子进程关系的进程。
它通过创建一个管道,将一个进程的输出连接到另一个进程的输入,实现它们之间的数据传输。
2. 消息队列:消息队列是一种以消息为单位进行进程间通信的方法。
它通过创
建一个消息队列,进程可以向队列中发送消息,并由其他进程接收。
这种通信方式可以实现进程之间的异步通信,提供了较大的灵活性。
3. 共享内存:共享内存是一种高效的进程间通信方法,它允许多个进程访问同
一块物理内存。
通过映射同一块共享内存区域到不同的进程地址空间,进程可以直接读写共享内存中的数据,实现高速的数据交换。
4. 套接字(Socket):套接字是一种用于网络编程的通信机制,也可以在本地
进程间进行通信。
它提供了一种可靠的、面向连接的方式来实现进程间的数据传输。
通过使用套接字,进程可以在不同主机或同一主机的不同进程之间进行通信。
这些是常见的进程间通信方法,每种方法都有其适用的场景和特点。
在实际应
用中,我们可以根据具体需求选择合适的通信方法来实现进程间的数据传输和信息共享。
了解这些通信方法的特点和使用方式,对于处理多进程间的数据交互是非常重要的。
一进程通信概述

一进程通信概述进程通信是指操作系统中不同进程之间交换数据和信息的过程。
在多进程系统中,每个进程都有自己独立的地址空间和资源。
为了实现进程之间的协作和共享,需要通过进程通信来进行数据传递、同步和互斥。
进程通信的主要目的是实现进程之间的数据共享和协作。
不同进程之间的通信可以通过多种方式进行,常见的进程通信方式有管道、消息队列、信号量、共享内存和套接字等。
管道是一种半双工的通信方式,通过创建一个特殊的文件来实现进程间的通信。
管道可以分为有名管道和无名管道,有名管道可以在不同进程之间进行通信,而无名管道则只能在父子进程之间进行通信。
消息队列是一种通过消息传递来实现进程之间通信的方式。
消息队列提供了一个消息缓冲区,进程可以将消息写入缓冲区,其他进程可以从缓冲区读出消息。
消息队列可以实现进程之间的异步通信,不需要直接建立连接,提高了系统的稳定性和可靠性。
信号量是一种简单而高效的进程同步和互斥机制。
信号量可以用来实现所谓的“互斥锁”或“条件变量”,通过对信号量的操作,进程可以在临界区中执行,实现进程间的互斥和同步。
共享内存是一种高效的进程通信方式,可以实现进程之间的快速数据共享。
共享内存允许多个进程直接访问同一块物理内存空间,避免了数据复制的开销,提高了数据传输的效率。
套接字是一种网络通信的方式,不仅可以实现进程之间在同一台计算机内的通信,还可以实现不同计算机之间的通信。
套接字通信提供了一套标准的接口和协议,可靠性和稳定性比较高。
进程通信的选择取决于具体的应用场景和需求。
不同的进程通信方式各有优缺点,需要根据实际需要选择合适的方式。
比如,如果需要实现高速数据共享,可以选择共享内存;如果需要实现异步通信,可以选择消息队列。
进程通信的实现需要考虑进程同步和互斥的问题。
在多进程系统中,多个进程同时对共享资源进行读写可能产生冲突,需要使用同步机制来保证数据的一致性和完整性。
常见的进程同步和互斥方式有互斥量、条件变量和读写锁等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二进程管理2.2 进程的消息通信1.实验目的(1) 加深对进程通信的理解,理解进程消息传递机制。
(2) 掌握进程通信相关系统调用。
(3) 理解系统调用和用户命令的区别。
2.实验类型:验证型3.实验学时:24.实验原理和知识点(1) 实验原理:消息通信机制允许进程之间大批量交换数据。
消息通信机制是以消息队列为基础的,消息队列是消息的链表。
发送进程将消息挂入接收进程的消息队列,接收进程从消息队列中接收消息。
消息队列有一个消息描述符。
对消息队列的操作是通过描述符进行的。
任何进程,只要有访问权并且知道描述符,就可以访问消息队列。
每个消息包括一个正长整型的类型字段,和一个非负长度的数据。
进程读或写消息时,要给出消息的类型。
若队列中使用的消息类型为0,则读取队列中的第一个消息。
(2) 知识点:消息、消息队列5.实验环境(硬件环境、软件环境):(1)硬件环境:Intel Pentium III 以上CPU,128MB以上内存,2GB以上硬盘(2)软件环境:linux操作系统。
6. 预备知识(1) msgget()系统调用:头文件 #include <sys/msg.h>函数原型int msgget(key_t key, int flag);功能:创建消息队列,或返回与key对应的队列描述符。
成功返回消息描述符,失败则返回-1。
参数:key是通信双方约定的队列关键字,为长整型数。
flag是访问控制命令,它的低9位为访问权限(代表用户、组用户、其他用户的读、写、执行访问权),其它位为队列建立方式。
(例:rwxrwx---:111111000)(2) msgsnd()系统调用:头文件 #include <sys/msg.h>函数原型 int msgsnd(int id, struct msgbuf *msgp,int size,int flag); 功能:发送一个消息。
成功返回0,失败返回-1。
参数:id是队列描述符。
msgp是用户定义的缓冲区。
size是消息长度。
flag是操作行为,若(flag&IPC_NOWAIT)为真,调用进程立即返回;若(flag&IPC_NOWAIT)为假,调用进程阻塞,直到消息被发送出去或队列描述符被删除或收到中断信号为止。
缓冲区结构定义如下:struct msgbuf{ long mtype; char mtext[n]; };(3) msgrcv()系统调用:头文件 #include <sys/msg.h>函数原型 int msgrcv(int id, struct msgbuf *msgp, int size,int type,int flag); 功能:接收一个消息。
成功返回消息正文长度,失败返回-1。
参数:id是队列描述符。
msgp是用户定义的缓冲区。
size是要接收的消息长度。
type 是消息类型,若type 为0则接收队列中的第一个消息,若type为正则接收类型为type 的第一个消息。
flag是操作行为,若(flag&IPC_NOWAIT)为真,调用进程立即返回。
若(flag&IPC_NOWAIT)为假,调用进程睡眠,直到接收到消息为止。
(4) msgctl()系统调用:头文件 #include <sys/msg.h>函数原型 int msgctl(int id, int cmd, struct msgid_ds *buf);功能:查询消息队列描述符状态,或设置描述符状态,或删除描述符。
成功返回0,失败返回-1。
参数:id是队列描述符。
cmd是命令类型,若cmd为IPC_STAT,队列id的消息队列头结构读入buf中;若cmd为IPC_SET,把buf所指向的信息复制到id 的消息队列头结构中。
若cmd为IPC_RMID,删除id的消息队列。
Buf为消息队列头结构msgid_ds指针。
(linux IPC/link?url=NtXNw0BBI7lTg09Gt7Vy_IrwPRP0XyD5n 1-s3ZQV-gP7iHN_ndEBOnrA5fYVNOA3wGqnwoahUWnBNkHUeQUrzIdSIsg8uiV0DW lZFHzOn4K)7.实验内容及步骤:(1)任务描述:使用系统调用msgget()、msgsnd()、msgrcv()、msgctl(),编写消息发送和接收程序。
要求消息的长度为1KB。
(2)程序设计过程:先定义消息结构,struct msgbuf{long mtype;char mtext[n];};用这个结构定义消息缓冲全局变量msg。
定义消息队列描述符msgqid。
约定队列关键字为75。
创建两个子进程client和server。
Client使用msgget()创建消息队列,使用msgsnd()发送10条消息。
Server使用msgget()获取消息队列描述符,然后用msgrcv()接收消息,完毕后删除队列描述符。
为了清楚地显示Client发送的是哪条消息,每发送一条消息,打印消息号(消息类型),Sever每收到一条消息,也打印消息类型。
设计收发方式。
Client每发送一条,Sever就接收一条。
/* 收发方式:Client()每发送一条消息,Server()就接收一条 *//* 此方法不能保证一定能同步。
对于不同速度的机器,如果没有其他耗时的进程,可以调整sleep的时间值而获得同步。
*///msg.c#include <stdio.h>#include <sys/types.h>#include <sys/msg.h>#include <sys/ipc.h>#define MSGKEY 75 /* 通信双方约定的队列关键字*/struct msgform /* 消息结构 */{ long mtype; /* 消息类型 */char mtext[1030]; /* 消息正文 */}msg;int msgqid; /* 消息队列描述符 */void Client(){ int i; /* 局部变量i,消息类型(表示第几条消息)*/msgqid=msgget(MSGKEY,0777); /* 创建消息队列, 访问权限为777 */for(i=10;i>=1;i--){ msg.mtype=i; /* 指定消息类型 */printf("(client %d) sent.\n",i); /* 打印消息类型 */msgsnd(msgqid,&msg,1024,0);/* 发送消息msg到msgqid消息队列,可以先把消息正文放到msg.mtext中*/ sleep(1);/*使进程挂起1秒。
等待接收进程接收。
比较加上这一句和不加这一句的结果 */}exit(0);}void Server(){ /* 获得关键字对应的消息队列描述符 */msgqid=msgget(MSGKEY,0777|IPC_CREAT);do {msgrcv(msgqid,&msg,1030,0,0); /* 从msgqid队列接收消息msg */printf("(server %d)received.\n",msg.mtype); /* 打印消息类型 */ }while(msg.mtype!=1); /* 消息类型为1时,释放队列*/msgctl(msgqid,IPC_RMID,0); /* 删除消息队列 */exit(0);}void main(){ int i;while((i=fork())==-1); /* 创建子进程;如果创建失败,执行空语句 */if(!i) Server(); /* 如果i=0,在子进程中,运行Server */else /* 否则,在父进程中*/{ while((i=fork())==-1); /* 继续创建子进程 */if(!i) Client(); /* 如果i=0,在子进程中,运行Client */}wait(0); /* 等待子进程结束 */wait(0); /* 等待子进程结束 */}注:IPC进程间通信(Inter-Process Communication)就是指多个进程之间相互通信,交换信息的方法。
/liugf05/archive/2012/07/05/2578356.html (3)上机操作创建 msg.c 源文件,编译 gcc –o msg msg.c,运行 ./msg观察屏幕,记录结果。
简答:程序中有,sleep(1);/*使进程挂起1秒。
等待接收进程接收。
比较加上这一句和不加这一句的结果 */,试分析为什么会有这样的运行结果差异。
(4)课堂练习(1)修改上述程序,让Client向Server发送一个字符串“The message here is justa joke.”。
Server收到消息后打印出来。
参考答案://msg2.c#include <stdio.h>#include <sys/types.h>#include <sys/msg.h>#include <sys/ipc.h>#define MSGKEY 75 /* 通信双方约定的队列关键字*/struct msgform /* 消息结构*/{ long mtype; /* 消息类型*/char mtext[1024]; /* 消息正文*/}msg;int msgqid; /* 消息队列描述符*/void Client(){ msg.mtype=1;strcpy(msg.mtext,"The message here is just a joke.");msgqid=msgget(MSGKEY,0777); /* 创建消息队列, 访问权限为777 *//* 指定消息类型*/printf("(client 1) sent.\n"); /* 打印消息类型*/msgsnd(msgqid,&msg,strlen(msg.mtext),0);/* 发送消息msg到msgqid消息队列,可以先把消息正文放到msg.mtext中,strlen(msg.mtext)*/ exit(0);}void Server(){ /* 获得关键字对应的消息队列描述符*/msgqid=msgget(MSGKEY,0777|IPC_CREAT);msgrcv(msgqid,&msg,1024,0,0); /* 从msgqid队列接收消息msg */printf("(server 1)received.\n"); /* 打印消息类型*/printf("%s\n",msg.mtext); /* 消息类型为1时,释放队列*/msgctl(msgqid,IPC_RMID,0); /* 删除消息队列*/exit(0);}void main(){ int i;while((i=fork())==-1); /* 创建子进程*/if(!i) Server(); /* 子进程Server */else{ while((i=fork())==-1); /* 创建子进程*/if(!i) Client(); /* 子进程Client */}wait(0); /* 等待子进程结束*/wait(0); /* 等待子进程结束*/}(5)思考:1、进程的消息传递机制和全局变量是一个概念吗?消息是通过全局变量进行传递的吗?//msg2.c#include <stdio.h>#include <sys/types.h>#include <sys/msg.h>#define MSGKEY 75 /* 通信双方约定的队列关键字*/struct msgform /* 消息结构*/{ long mtype; /* 消息类型*/char mtext[1024]; /* 消息正文*/}msg;int msgqid; /* 消息队列描述符*/void Client(){ printf("star copy\n");strcpy(msg.mtext,"The message here is just a joke.");printf("end copy\n");exit(0);}void Server(){sleep(1);printf("star display\n");printf("done!%s\n",msg.mtext);printf("end copy\n");exit(0);}void main(){ int i;while((i=fork())==-1); /* 创建子进程*/if(!i) Server(); /* 子进程Server */else{ while((i=fork())==-1); /* 创建子进程*/if(!i) Client(); /* 子进程Client */}wait(0); /* 等待子进程结束*/wait(0); /* 等待子进程结束*/}1.在client里面改变了msg.mtext,但是server里面printf出来却什么也没有,说明全局变量不可在进程间传递信息。