欢迎来到天天文库
浏览记录
ID:20077332
大小:686.55 KB
页数:19页
时间:2018-10-09
《lab5 linux进程及并发程序设计 2》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、华南师范大学实验报告学生姓名学号专业多媒体与网络技术年级、班级12级多媒体2班课程名称操作系统原理实验项目实验5Linux进程及并发程序设计实验类型验证设计R综合实验时间2014年4月22日实验指导老师实验评分实验5Linux进程及并发程序设计一.实验目的:掌握Linux环境下的进程并发程序及管道应用程序的编写要点。二.实验内容:1编写一个并发程序,父进程打印“TheParentisrunning”,子进程打印“TheChildisrunning”。2编写一个并发程序,父进程打印“TheParentisrunn
2、ing”,子进程打印“TheChildisrunning”,并保证子进程输出在前,父进程输出在后。3编写一个管道应用程序,父进程通过管道提供字符串“putthestringintothepipe.”给子进程,子进程通过管道接收这条信息,然后打印输出。4调试并运行3.10的并发程序设计实例,显示结果是什么,并分析之。5提高题:编写一个管道应用程序,使父进程接受用户从键盘输入的数据信息并通过管道传送给子进程,子进程打印输出通过管道接收到的数据信息。三.实验过程步骤与结果:(一)编写一个并发程序1.根据要求编写程序:
3、#includemain(){intp;//存放子进程pid号while((p=fork())==-1);//创建子进程直到成功为止if(p==0)//返回值=0表示子进程返回{printf("TheChildisrunning");}else//返回值>0表示父进程返回{printf("TheParentisrunning");}}2.存放在Linux中的bingfa.c文档中:3.使用gcc命令对bingfa.c进行编译:4.多次使用./a.out执行该命令,查看结果:输出:The
4、ParentisrunningTheChildisrunning或者TheChildisrunningTheParentisrunning5.运行结果分析:通过实验结果可看出,这是一个并发程序,子进程和父进程在不同的情况下先后出现的顺序可能不同,具有随机性。(二)编写一个并发程序(子先父后)1.根据要求编写程序:#include#includemain(){intp;//存放子进程pid号while((p=fork())==-1);//创建子进程直到成功为止if(p==0)
5、//返回值=0表示子进程返回{printf("TheChildisrunning");exit(0);//在子进程结束时调用exit(0),使子进程自我终止,并发终止信号给其父进程;}else//返回值>0表示父进程返回{wait(0);//父进程等待子进程终止,再执行下方程序printf("TheParentisrunning");}}2.存放在Linux中的Childfirst.c文档中:3.使用gcc命令对Childfirst.c进行编译:4.多次使用./a.out执行该命令,查看结果:输出:Th
6、eChildisrunningTheParentisrunning5.运行结果分析:从运行结果可看出此程序实现了父等子的功能,始终是子进程先执行。从代码上看,是用wait(0)和exit(0)实现的,在子进程(p=0)运行后使用exit(0)终止进程,在父进程(p>0)内容程序执行前加上wait(0),使父进程接收到子进程结束的信号后才执行内容程序,从而实现了后执行父进程的效果。(三)编写一个管道应用程序(父提供给子字符串)1.根据要求编写程序:#include#include7、std.h>#include//printf函数的头文件#include//exit函数的头文件#defineLINESIZE1024intmain(void){intn,fd[2];pid_tpid;charline[LINESIZE];if(pipe(fd)<0)//调用pipe()函数建立管道;{printf("pipeerror");//建立不成功则返回“pipeerror",并退出;exit(1);}if((pid=fork())<0)//创建进程,创建不成功则返8、回"forkerror"并退出{printf("forkerror");exit(1);}elseif(pid>0)//父进程的fork()返回{close(fd[0]);//关闭管道读指针;printf("I'mfather~");//声明它是父进程write(fd[1],"putthestringintothepipe.",29);//将"putthestringintot
7、std.h>#include//printf函数的头文件#include//exit函数的头文件#defineLINESIZE1024intmain(void){intn,fd[2];pid_tpid;charline[LINESIZE];if(pipe(fd)<0)//调用pipe()函数建立管道;{printf("pipeerror");//建立不成功则返回“pipeerror",并退出;exit(1);}if((pid=fork())<0)//创建进程,创建不成功则返
8、回"forkerror"并退出{printf("forkerror");exit(1);}elseif(pid>0)//父进程的fork()返回{close(fd[0]);//关闭管道读指针;printf("I'mfather~");//声明它是父进程write(fd[1],"putthestringintothepipe.",29);//将"putthestringintot
此文档下载收益归作者所有