实验三-进程通讯实验报告.pdf
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负责从键盘接 收字符,当输入"operatingsystem01234-=,."后,由子进程2发送消息(内 容为:operatingsystem01234-=,.)给子进程1,由子进程1实现分发任 务,将字符输出到文件"letter.txt",将数字输出到文件"number.txt",将其 他字符写到"抛弃字符共享存储区array"并将从消息队列中读取的字符串 写到字符共享存储区addr中,再向父进程发送16信号,实现进程之间的 同步;之后由父进程接收16信号后,从addr共享存储区中获取由键盘输 入的字符串,并由终端输出显示,若有字符丢弃,同时也提醒用户有哪 些字符被丢弃了,显示到终端。通过while()循环,实现多组数据输入并 显示和分发写入文件。当用户需要退出时,从终端输入"quit",所有子 进程退出,由父进程断开和共享存储区的附接并删除消息队列,之后也 退出。 【问题分析】 实验中出现的问题及解决办法: 1、比较消息队列和共享存储区在消息通信机制中的数据传输的时 间和性能: 由于两种机制实现的机理和用处都不一样,难以直接进行时间上的 比较。如果比较其性能,应更加全面地分析。 消息队列的建立
- 粉丝: 167
- 资源: 3万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助