1、linux实验二实验报告深 圳 大 学 实 验 报 告课程名称: Linux系统编程实验项目名称:进程间通信学院:计算机与软件学院专业:软件工程指导教师:冯禹洪报告人:程照原学号2011150216班级:2 实验时间:2014/5/23实验报告提交时间:教务处制一、实验目标:1. 掌握管道/命名管道的作用及其在编程中的作用2. 掌握信号的作用及其在编程中的应用3. 掌握客户端-服务器架构及其编程实现4. 感受C库函数的实现与系统调用之间的关系二、实验环境与工件1. 湖边Linux实验室2. Fedora 13三、实验内容与步骤客户端-服务器架构是常用的网络编程架构。使用我们现学的知识一个简单的
2、客户端服务器可以描绘如图1。图1. 客户端-服务器用FIFO进行通信其中,服务器(Server)端的功能描述如下: 后台进程 从命名管道中读取客户端的请求 计算结果并将其写到客户端的命名管道客户端(Client)的功能描述如下: 通过服务器命名管道发送请求到服务器 通过自己的命名管道读取服务器消息然后退出用到的通信机制FIFO和信号处理。图2是客户端发送给服务器的请求的消息格式,图3是客户端的实现代码,图4是服务器端的实现代码。图2. 客户端发送给服务器的请求的消息格式图3.client.c的实现图4. calcserver.c的实现1、请分析Server与Client的行为以及他们之间的交互
3、,附上相应的运行结果。运行流程见图5。另外,并用命令显示公共FIFO相关的信息并解释特征字段含义;(20分)图5. 客户端-服务器的执行2请在你的主目录如/home/szu下创建目录,以你的姓名学号命名,例如zhangsan123456,在目录zhangsan123456下建子文件chatapplication,在chatapplication下建data, 最后在data下分别建立server_fifo, client_fifo,请将公共命名管道设置为/home/szu/zhangsan123456/chatapplication/data/server_fifo/chat_server_f
4、ifo请将私有命名管道设置为/home/szu/zhangsan123456/chatapplication/data/client_fifo/chat_client$PID_fifo, 其中,$PID请用客户端进程id取代作这样的修改后,以上程序将报错。请结合题干文件” GDB的使用.ppt”和“用GDB调试多进程程序.jpg”,使用GDB定位出错代码行和修正代码。请截图演示关键调试步骤、出错代码和修正代码段。(40分)由代码可看出,read(my_fifo,buffer,BUFF_SZ)有错误,细查可看出这是离出错最后一次调用mypipename,所以错误应该出在这里。继续检查info结构的定义发现my_fifo空间只有50个字节,而路径名使其溢出了,所以导致strcpy出错。将50改为100后成功运行。3. 修改源程序,实现两个Client之间的通信通过Server来传递消息的功能。请用文字描述你要实现的通信,相应的数据结构说明,并附上相应的代码及运行结果截图。(40分)四、实验结果五、实验总结与体会指导教师批阅意见:成绩评定:指导教师签字:年月日备注: