实验三-进程通讯实验报告.doc
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
实验三 进程通讯实验报告 【姓名】 【学号】 【实验题目】进程通讯——消息队列与共享存储区 【实验目的】 1. 掌握进程间通讯的编程方法; 2. 加深对进程并发执行的理解; 3. 学习利用消息队列和共享存储区实现进程通信的方法。 【实验内容】 设计一个多进程并发运行的程序,它由不同的进程完成下列工作: (1)接收键盘输入进程 负责接收用户的键盘输入,并以适当的方式将由键盘获得的数据交给其它进程处理。 (2)显示进程 负责全部数据显示任务,包括键盘输入数据的显示和提示信息的显示。 (3)分发数据进程 将键盘输入的数据分为3类,即字母、数字和其它,并分别将字母写入文件letter.txt中 ,数字写入文件number.txt中,除字母和数字外其它数据丢弃。 【实验要求】 1. 程序能以适当的方式提示用户输入数据; 2. 提示用户有数据被丢弃; 3. 全部的显示任务必须由显示进程完成; 4. 整个程序能够连续处理多组输入数据,直到用户输入"quit"字符串,整个程序结束 ; 5. 进一步要求:同时采用共享存储区和消息2种方法实现进程之间的通信,并比较这 2种通信方法的利弊。 【实验方法】 1. 利用fork()函数创建2个子进程,用一个父进程和两个子进程完成上面的三个实验 任务,用子进程1实现分发数据任务,子进程2实现接受键盘输入任务,父进程实 现全部的显示任务。 2. 同时通过共享存储区和消息队列两种进程通讯方式实现上面三个进程之间的同步和 互斥。 3. 利用while()循环、kill()函数和signal()函数实现连续多组数据输入。 【程序结构】 ·数据结构:消息队列、字符数组; ·程序结构:顺序结构、if-else分支结构和while循环结构; ·主要算法:无特别算法 【实验结果】 1、有代表性的执行结果: [stud13@localhost stud13]$ cc ipc.c [stud13@localhost stud13]$ ./a.out Please input a line: operatingsystem01234-=,. Your message is: operatingsystem01234-=,. The characters deserted are: -=,. Please input a line: xushengju6651001!@#$%^&*() Your message is: xushengju6651001!@#$%^&*() The characters deserted are: !@#$%^&*() Please input a line: Hello123 Your message is: Hello123 Please input a line: quit [stud13@localhost stud13]$ cat letter.txt OperatingsystemxushengjuHello[stud13@localhost stud13]$ cat number.txt 012346651001123[stud13@localhost stud13]$ 2、结果分析及解释: 在创建子进程1时,由于先返回子进程的ID号,msgrcv(msgid,&msg,BUFSIZE,0,0)一直都 是非0值,故循环等待。接着返回父进程ID,父进程负责全部的显示任务,先提示用户输 入"Please input a line:",然后等待子进程2的16信号所以当子进程2负责从键盘接收字符,当输入"oper atingsystem01234-=,."后,由子进程2发送消息(内容为:operatingsystem01234- =,.)给子进程1,由子进程1实现分发任务,将字符输出到文件"letter.txt",将数字输 出到文件"number.txt",将其他字符写到"抛弃字符共享存储区array"并将从消息队列中 读取的字符串写到字符共享存储区addr中,再向父进程发送16信号,实现进程之间的同 步;之后由父进程接收16信号后,从addr共享存储区中获取由键盘输入的字符串,并由 终端输出显示,若有字符丢弃,同时也提醒用户有哪些字符被丢弃了,显示到终端。通 过while()循环,实现多组数据输入并显示和分发写入文件。当用户需要退出时,从终端 输入"quit",所有子进程退出,由父进程断开和共享存储区的附接并删除消息队列,之 后也退出。 【问题分析】 实验中出现的问题及解决办法: 1、比较消息队列和共享存储区在消息通信机制中的数据传输的时间和性能: 由于两种机制实现的机理和用处都不一样,难以直接进行时间上的比较。如果比较其 性能,应更加全面地分析。 消息队列的建立比共享区的建立消耗的资源少
- 粉丝: 167
- 资源: 3万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助