版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北京化工大学北方学院课程设计报告课程名称操作系统课程设计设计题目LinuxC程序设计专业、班级学号姓名指导教师设计时间2015.10.19——2015.11.06一、2015年11月6日一、引言(简要说明设计题目的目的、意义、内容、主要任务等)1.目的-----WORD格式--可编辑--专业资料-----本次系统软件课程设计的主要目的有两个:一方面是分析设计linux源代码,另一方面是进行系统级的程序设计。意义:⑴通过本课题的毕业设计,熟悉了关于linux下C语言的系统软件程序设计,可以比较深入的了解和掌握基本gcc,vim等编程软件的使用和对makefile文件的使用。⑵掌握进程间的通信方式,进程控制,文件操作的方式。⑶本报告就系统的开发过程做了详细的介绍,并对系统的原理、总体设计等方面做了深入细致的讨论。内容采用结构化分析和设计方法,运用linuxC开发实现本次操作系统设计的4个任务。主要任务1、设计一个程序,要求创建一个管道,复制进程,父进程往管道中写入字符串,子进程从管道中读取并输出字符串。2、设计一个程序,要求复制进程,子进程显示自己的进程号(PID)后暂停一段时间,父进程等待子进程正常结束,打印显示等待的进程号(PID)和等待的进程退出状态。3、用管道实现Islsort命令功能。4、设计一个程序,要求用户进程复制出一个子进程,父进程向子进程发出信号,子进程收到此信号,结束子进程。二、正文(课程设计的主要内容,包括实验与观测方法和结果、仪器设备、计算方法、编程原理、数据处理、设计说明与依据、加工整理和图表、形成的论点和导出的结论等。正文内容必须实事求是、客观真切、准确完备、合乎逻辑、层次分明、语言流畅、结构严谨,符合各学科、专业的有关要求。)需求分许、设计一个程序,要求创建一个管道,复制进程,父进程往管道中写入字符串,子进程从管道中读取并输出字符串。、设计一个程序,要求复制进程,子进程显示自己的进程号(PID)后暂停一段时间,父进程等待子进程正常结束,打印显示等待的进程号(PID)和等待的进程退出状态。、用管道实现Islsort命令功能。、设计一个程序,要求用户进程复制出一个子进程,父进程向子进程发出信号,子进程收到此信号,结束子进程。系统设计第一个任务进程间通信程序结构及主要过程本程序运用了顺序结构,选择结构等c语言主要结构,指针、函数调用等知识,该程序覆盖了linuxc语言所学的除结构体外的大部分知识。本程序结构和过程思路:利用fork函数复制进程,父进程往管道中写入字符串,子进程从管道中读取并输出字符串第二个任务进程控制程序结构及主要过程本程序运用了顺序结构,选择结构等c语言主要结构,指针、函数调用等知识,该程序覆盖了linuxc语言所学的除结构体外的大部分知识。本程序结构和过程思路如下:利用fork函数复制进程,再利用getpid函数获取子进程的进程号,同时也利用了wait函数来等待进程。第三个任务结构及主要过程本程序运用了顺序结构,选择结构等c语言主要结构,指针、函数调用等知识,该程序覆盖了linuxc语言所学的除结构体外的大部分知识。本程序结构和过程思路:利用fork函数复制进程,调用run_ls和run_sort函数实现linux下Islsort命令,对当前目录进行操作。第四个任务进程控制程序结构及主要过程本程序运用了顺序结构,选择结构等c语言主要结构,指针、函数调用等知识,该程序覆盖了linuxc语言所学的除结构体外的大部分知识。本程序结构和过程思路:利用fork函数复制进程,父进程打印进程信息并且signol函数通知子进程,子进程收到父进程的信号后打印结束进程的提示然后结束进程,打印信息。系统实现(1)进程间通信实现源代码:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>intmain(intargc,char*argv[]){intpd[2];/*用于保存管道文件描述符*/charout[80],str[]="helloflami!”;/*str是要写入的字符串,out用于保存从管道读取的字符串*/assert(pipe(pd)!=-1);/*断言用于确定pipe()函数执行成功,如果管道创建失败,则pipe()返回-1*/if(!fork())write(pd[1],str,strlen(str));/*父线程将字符串写入管道*/else{read(pd[0],out,strlen(str));/*在子线程中从管道中读取子进程写入的字符串*/printf("%s\n",out);/*子线程中输出。*/}return0;}
进程控制实现源代码:#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<sys/types.h>#include<sys/wait.h>intmain()(pid_tpid,vpid;intstatus,i;pid=fork();if(pid==0)(printf("子进程pid:%d\n”,getpid());sleep(2);exit(3);}else{
vpid=wait(&status);i=WEXITSTATUS(status);printf("父进程pid:%d,退出状态%d\n",vpid,i);}}(3)管道实现ls|sort命令#include<unistd.h>intfd[2];voidrun_ls(){close(fd[0]);close(fd[1]);char*argv[]={"ls",NULL,NULL};//(传递给执行文件的参数数组,这里包含执行文件的参数char*envp[]={0,NULL};//传递给执行文件新的环境变量数组execve("/bin/ls”,argv,envp);}voidrun_sort(){close(fd[0]);close(fd[1]);char*argv[]={"sort",NULL,NULL};//(传递给执行文件的参数数〉组,这里包含执行文件的参数char*envp[]={0,NULL};//传递给执行文件新的环境变量数组execve("/usr/bin/sort”,argv,envp);}intmain(){pipe(fd);if(fork()>0){dup2(fd[1],1);run_ls();}else{dup2(fd[0],0);close(fd[0]);close(fd[1]);pipe(fd);if(fork()>0){dup2(fd[1],1);run_sort();}else{dup2(fd[0],0);run_sort();}}return0;}(4)第四个任务源代码#include<sys/types.h>#include<signal.h>#include<stdio.h>#include<stdlib.h>#include<unistd.h>voidhandler(intsigno){
printf("thisischildprocess,pid=%d,parentid=%d\n”,getpid(),getppid());}intmain(){intpid;pid=fork();if(pid<0){perror("forkerror");}elseif(pid==0){signal(SIGUSR1,handler);pause();printf("childprocessexit\n");exit(0);}else{intstatus;printf("thisisparentprocess,pid=%d,parentid=%d\n”,getpid(),getppid());printf("waitingforchildprocessexit\n");kill(pid,SIGUSR1);wait(&status);printf("thechildprocessexit,thereturnstatusis0x%x\n",status);pause();}return0;}5,系统测试(1)运行结果[umr@localhostDocuments]$videmo01.c[umr@localhostDocuments]$gcc-odemo01demo01.cum"Slocdlhostum^.ocalhostlo"Ej'.ocalhostum"Slocdlhostum^.ocalhostlo"Ej'.ocalhostiaI'qflami6^ocuTe,_ts]!EvidensOL.cDocuments]Sgcc-odetnoOLdenoDl.c$./dSTOZlZ:OCLIT0$./dSTOZl结果分析这是一个进程控制程序,要求创建一个管道,复制进程,父进程往管道中写入字符串,子进程从管道中读取并输出字符串。经过测试,该程序基本实现了以上功能,且计算结果合理正确,满足实验要求。试验过程及结果[umr@localhostDocuments]$videmo02.c[umr@localhostDocuments]$gcc-odemo02demo02.c[umr@localhostDocuments]$./demo02子进程pid:14004父进程pid:14004,退出状态3umi-OlocalhostDocuments]$videmaOZ.匚unr®1.acaihostDocuments]$gcc-odema02demo02.cumr®!acaihastDocuments]$./demcOS子进程pid:L4004I父进程Did:L4W4.退出状态3结果分析这是一个进程控制程序,要求完成复制进程,子进程显示自己的进程号(PID)后暂停一段时间,父进程等待子进程正常结束,打印显示等待的进程号(PID)和等待的进程退出状态。经过测试,该程序基本实现了以上功能,且计算结果合理正确,满足实验要求。试验过程及结果[umr@localhostDocuments]$videmo03.c[umr@localhostDocuments]$gcc-odemo03demo03.c[umr@localhostDocuments]$./demo03demo01demo01.cdemo02demo02.cdemo03demo03.cdemo04demo04.cMFIWE|a*网匚,II-iwiMFIWE|a*网匚,II-iwi-ifflniii",川■|用心!士4N;*rr#"|»■winLvDLMliY顷1|uar<Lic«di'lhai«icnnwjii令<s«wr如一一一_一_:ha雄「131*白r田田1百斤土:JrTMlL:cfijm--1,,pt..Miknar*inCnraar^Dn.JiTffll.U理1」E--'»al~rpFw_lfri:r:iUH旧■»>:!H^r|IBiBi脂HEMliWEdllvlOMBLiJ.iILiiVLikalFnaLEuimflilJk-QdWAId.lL'jrP.cciilhaiLrcciMnEEF*加EmmMCIXwt』*¥14«"im.c|』r4LwTha・ktpc-advSj.K--itE«LMit^E/dwvO?rHE■H"3k-tfifildircirwt-aryr454-i*»■?M*fll<|r中i"iLE皿皿五壬ST或It闩』昏代:JmHUconuuLsmuh{SIBiH胃fL地iMtiM■F龄*1工村日il谣&:inFaJSSj^-f-iocalhair"111■-*Ji结果分析:程序利用fork函数复制进程,调用run_ls和run_sort函数实现linux下Islsort命令,对当前目录进行操作。基本完成程序设计要求,且结果正确合理,满足实验要求。试验过程及结果[umr@localhostDocuments]$./demo04thisisparentprocess,pid=4010,parentid=3693waitingforchildprocessexitthechildprocessexit,thereturnstatusis0xa[uin!■©!.□£[uin!■©!.□£alhostDocumentsS,/demo04thisisparentprocess,pld=4010,parentid=369Bwaitingforchildprocessexitthechildprccessexit,thereturnstatusisOxa结果分析这是一个进程控制软件,要求复制一个子进程,要求父进程发送一个信号给子进程,发送时打印提示,然后子进程收到信号后打印提示结束进程,结束完成后打印测试结果。程序基本已实现程序要求,结果正确合理,满足实验要求。三、结论(应当准确、完整、明确精练;也可以在结论或讨论中提出建议、设想、尚待解决问题等。)设计过程中的感受与体会从程序的整体构思到程序的算法设计及程序的编写再到最后程序的调试,我经历了重重困难和考验,但是我并没有放弃,我运用本学期所学到的知识和课外的一些知识,从想到查再到问,最后完成了这个4个程序。在设计过程中,我不仅仅是完成了程序,更重要的是我在这次设计中巩固了linuxc所学到的知识,锻炼了自己的实践能力;另外在这次设计的过程中,我懂得了在设计遇到困难的时候怎样去解决这个困难。从书上网上查阅资料,向比我们知识丰富的人虚心请教,这是我们解决问题的主要方法,这样也同时扩宽了我们的知识面,打破了课堂的局限,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿古诗学习课件
- 《光生伏特器》课件
- 大学生职业规划公共服务
- 适老智能家居系统功能性需求
- 两位数加减一位数综合练习试题
- 《理科班监督权威》课件
- 医疗行业职业道德规范
- 正常妊娠妇女的护理
- 市妇幼保健院终末住院病历质量评价用表
- 临床治疗诊疗流程规范
- 企业风险辨识清单
- 装修增减项单模板
- 旅游景区公共信息导向系统规范与设计(旅游)
- 肺部感染性疾病诊疗规范内科学诊疗规范诊疗指南2023版
- 有效教学崔允漷读书汇报课件
- 双眼视觉的分析方法 图表的基本构成
- 年产10吨功能益生菌冻干粉的工厂设计改
- 期中考试成绩质量分析会课件
- 《为未知而教 为未来而学》读书笔记思维导图
- 2023上海车展展前报告
- 中科大天文学史课件17近代天体测量和天体力学的发展
评论
0/150
提交评论