第2章-与处理器管理有关的系统功能调用实践作业

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第2章与处理器管理有关的系统功能调用实践作业参照“强化实践能力培养课程内容”中“进程创建和执行的实践能力培养考核选例”和“线程的创建及线程间管道通信实践能力培养考核选例”程序,编写一个能建立两个子进程的程序(父进程),让这三个进程并发执行完成以下二元函数的计算:其中由父进程完成:f(x,y)=f(x)+f(y)由子进程1完成阶乘计算:f(x)=f(x-1)*x(x1)f(x)=1(x=1)由子进程2完成非波纳奇序列:f(y)=f(y-1)+f(y-2)(y2)f(y)=1(y=1,2)答:实验代码及说明#includestdio.h#includeunistd.h#includestdlib.hintmain(intargc,char*argv[]){intpid,pid2;//进程号intpipe1[2];//存放第一个无名管道标号intpipe2[2];//存放第二个无名管道标号intfx,fy,fxy;intx,y;//接受用户输入printf(Pleaseinputxandy\n);scanf(%d%d,&x,&y);//使用pipe()系统调用建立两个无名管道。建立不成功程序退出,执行终止if(pipe(pipe1)0){perror(pipe1createfailed);exit(EXIT_FAILURE);}if(pipe(pipe2)0){perror(pipe2createfailed);exit(EXIT_FAILURE);}//使用fork()建立第一个子进程,不成功退出if((pid=fork())0){perror(process1createfailed);exit(EXIT_FAILURE);}elseif(pid==0){//第一个子进程负责从管道1的1端写close(pipe1[0]);//计算fx并输出到管道fx=Fx(x);printf(childpidis%dfx=%d(x=%d)\n,getpid(),fx,x);write(pipe1[1],&fx,sizeof(int));//读写完成后,关闭管道close(pipe1[1]);//子进程执行结束exit(EXIT_SUCCESS);}else{//父进程//再创建一个子进程if((pid2=fork())0){perror(process2createfailed.);exit(EXIT_FAILURE);}elseif(pid2==0){//管道2的1端写close(pipe2[0]);fy=Fy(y);printf(childpidis%dfy=%d(y=%d)\n,getpid(),fy,y);write(pipe2[1],&fy,sizeof(int));close(pipe2[1]);//退出该线程exit(EXIT_SUCCESS);}//父进程负责从管道1的0端,管道2的0端读close(pipe1[1]);close(pipe2[1]);read(pipe1[0],&fx,sizeof(int));read(pipe2[0],&fy,sizeof(int));fxy=fx+fy;printf(parentpidis%dfxy=%d(x=%d,y=%d)\n,getpid(),fxy,x,y);close(pipe1[0]);close(pipe2[0]);}//父进程执行结束returnEXIT_SUCCESS;}//函数(xy)intFxy(constintfx,constintfy){returnfx+fy;}//函数f(y)intFy(constinty){returny==1||y==2?1:(Fy(y-1)+Fy(y-2));}//函数f(x)intFx(constintx){returnx==1?1:Fx(x-1)*x;}

1 / 3
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功