欢迎来到优知文库! | 帮助中心 分享价值,成长自我!
优知文库
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 优知文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    操作系统实验报告--实验三 一个进程启动另一个程序的执行.docx

    • 资源ID:724453       资源大小:106.77KB        全文页数:17页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录
    二维码
    扫码关注公众号登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,如果您不填写信息,系统将为您自动创建临时账号,适用于临时下载。
    如果您填写信息,用户名和密码都是您填写的【邮箱或者手机号】(系统自动生成),方便查询和重复下载。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    操作系统实验报告--实验三 一个进程启动另一个程序的执行.docx

    操作系统实验报告专业:物联网工程实验三一个进程启动另一个程序的执行【实验目的】在Linux环境系统中,execve系统调用用于执行一个程序(可执行二进制文件或脚本)。exec函数家族,包括execRexeclp>execle>execvexecvp,是execve系统调用的前端。本实验要求学生学习在一个进程中启动另一个程序执行的基本方法,了解execve系统调用和exec函数家族的使用方法。【实验内容】(一)初步认识“在一个进程中启动另一个程序的执行:1编辑一个源程序dummy.c,并编译为可执行程序dummy。/dummy.c#include<stdio.h>#include<stdlib.h>#include<systypes.h>#include<unistd.h>intmain(intargc,char*argv)(intresult;printf("nYouarenowinarunningprogram%s".n,argv0);printf(,MyPIDis%d.Myparent'sPIDis%d.n",getpid(),getppid();printf(nPleaseinputaninteger(0-255),whichwillbereturnedtomyparentprocessn");scanf(%dn,&result);printf(,Goodbye.nnu);return(result&0377);)2、再编辑一个源程序exec_test.c,并编译为可执行程序exec_testo/exec_test.c#include<stdio.h>#include<stdlib.h>#include<error.h>#include<systypes.h>#include<unistd.h>#include<syswait.h>intmain(intargc,char*argv)(intresult;result=fork();if(result<0)(perror(Failedtocreatechild'*);exit(l);)elseif(result=0)/Child1char*cmd="./dummy"printf("Chidprocess,sPIDis%d.Myparent'sPIDis%d.n",getpid(),getppid();printf(,'Childprocessisabouttoexecute"%s,nn,cmd);result=execlp(cmd,cmd,NULL);if(result=-1)(perror("Inchildprocess,failedtoexecaprogram*');)exit(0);)else(/parentintstatus;printf(nParentprocess'sPIDis%d.n",getpid();printf(nParentprocessiswaiting.n");wait(&status);printf(nInparentprocess,status=0x%x,WEXITSTATUS(status)=%d(i.e.0x%x)nu,status,WExiTSTATUS(Status),WEXITSTATUS(status);)return(EXIT.SUCCESS);)3、先执行dummy,观察、分析执行结果;然后执行程序exec_test,观察、分析执行结果。(注意,两个可执行程序都在当前目录下)(二)实现一个简单的命令解释外壳(Shell)o1基本功能:(1)从标准输入读取一行字符串,其中包含欲执行的命令和它的命令行参数(如果有的话)。提示:需要将输入的一行字符串进行拆分,以空格、制表符(t)作为分隔符,分解为命令、命令行参数(零个或多个)。如果用户输入的命令是“quit”,则退出执行。(2)创建一个子进程。(3)在子进程中,执行在(1)读入的命令,如果有命令行参数,也要传递。(4)在父进程中,等待子进程结束,然后打印子进程的返回值。(5)在父进程中,控制转移至(I)o【实验要求】按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。【实验设计】dummy程序:HIiyuxin221liyuxin221test3$./dummyHyouarenowinarunningprogram"./dummy". MyPIDis14758.Myparent'sPIDis14449.HPleaseinputaninteger(-255),whichwillbereturnedtomyparentprocess.233 Goodbye.I,lyg11221QlIyUXln221test33结果显示了该进程的PID和父进程的PID,并且将一个值返回给了父进程。exec_testSJ?5:Inparentprocess,status=×2a0,WEXITSTATUS(status)=42(i.e.x2a)Iiyuxin221liyuxin221test3S./exectest.outParentprocess'sPIDis14769.ParentprocessiswaitingChildprocess'sPIDis1477.Myparent'sPIDis14769.Childprocessisabouttoexecute"./dummy"Youarenowinarunningprogram"./dummy".MyPIDis14770.Myparent'sPIDis14769.Pleaseinputaninteger(-255),whichwillbereturnedtomyparentprocess:19Goodbye.Inparentprocess,status=0x13,WEXITSTATUS(status)=19(i.e.×13)Iiyuxin221(aiiyuxin221test3S在子进程中键入的数值返回了父进程,并显示了出来(19).实现一个简单的命令解释外壳(Shell)源代码:/example#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<unistd.h>#include<ermo.h>#include<sys/wait.h>#include<string.h>intmain()intpid;intrtn;子进程的返回值intexec_errorno;charcommand256;char*p;char*q;char*c20;inti=0,j=0;while(l)/从终端读取要执行的命令printf(">);command0=,0,;p=fgets(command,256,stdin);if(p=NULL)perror("Errorinfgets().n);exit(-l);)/Deletethelastchar(newline)inthestringreturnedbyfgets()Commandfstrlen(Command)-1=,0,;p=command;q=p;/Quitifuserinputs"quit"if(!strcmp(command,"quit',)break;)/Createachildprocesstoexecutecommandpid=fork();if(pid<O)perror(HFailedwhilecallingfork.*);exit(-l);1elseif(pid=0)子进程执行此命令for(;)ci=strtok(p,M,);if(ci=NULL)break;1i+;p=NULL;)p=c0;for(j=0;j<i;j+)printf("%sn",cj);)exec_errorno=execvp(p,c);/如臬exec函数返回,表明没有正常执行命令只有在这种情况下,才会执行下面的打印错误信息perror(command);exit(exec_errorno);)else父进程,等待子进程结束,并打印子进程的返回值wait(&rtn);printf("nValuereturnedfromchildprocess,rtn=%dn",rtn);printf(,WEXITSTATUS(rtn)=%dn",WEXITSTATUS(rtn);)return0;)【实验测试结果及分析】此程序通过对execvp()函数的调用,使得通过输入命令被执行。输入的命令用fgets()存入command字符串中,然后反复调用StrtOko函数,分割所得字符串,达到将命令分割的目的,使得多命令行参数得以实现。【运行结果】Iiyuxin221liyuxin221:/test/test3C×文件(F)编Sg(E)查看(V)终端(T)帮助(三)>quitIiyuxin221liyuxi221 test3 fial2.out>ls -alIs -al 总用量152 dxrwxr-x dnxnxr-x -xrwxr-x -rwxrwxr-x -rwxn-n- -rwxrwxr-x -nxn-rw- rwxrwxr-x -xn-n- -nxrfxr-x -nxn-n- -rwxnxr-x -nxn-n- -rwxrwxr-x -rwxn-rv- rwxrwxr-x -rwxr-xr-x -nxrwxr-x -xnn -rwxrw-n- -rwxnxr-x -rwxn-n- -nxrw-rw-2 51 1111111 11111111 11111Uyuxin221 liyuxin221 liyuxi221 liyu×i221 liy×in221 Uyuxin221 liyuxin221 Uyuxin221 liyuxin221 liyuxi221 liyuxin221 liyu×i221 liy×in221 Xiyuxin221 Uyuxin221 Uyuxin221 liyuxin221 liyuxin221 liyuxi221 liy×in221 liyu×in221 liyuxin221 liyu×in221liyuxin221 liyuxin221 liyuxi221 liyuxin221 liyuxin221 liyuxin221 Uyuxin221 liyuxin221 liyuxin221 liyuxin221 liyuxi221 liyuxin221 liyuxin221 liyuxin221 Uyuxin221 liyuxin221 liyuxin221 liyuxin2

    注意事项

    本文(操作系统实验报告--实验三 一个进程启动另一个程序的执行.docx)为本站会员(王**)主动上传,优知文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知优知文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 yzwku网站版权所有

    经营许可证编号:宁ICP备2022001189号-2

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。优知文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知优知文库网,我们立即给予删除!

    收起
    展开