版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业北京化工大学北方学院课程设计报告课程名称 操作系统课程设计 设计题目 Linux C程序设计 专业、班级 学 号 姓 名 指导教师 设计时间 2015.10.192015.11.06 2015年 11 月 6 日引言(简要说明设计题目的目的、意义、内容、主要任务等)目的本次系统软件课程设计的主要目的有两个:一方面是分析设计linux源代码,另一方面是进行系统级的程序设计。意义:通过本课题的毕业设计,熟悉了关于linux下C语言的系统软件程序设计,可以比较深入的了解和掌握
2、基本gcc,vim等编程软件的使用和对makefile文件的使用。掌握进程间的通信方式,进程控制,文件操作的方式。本报告就系统的开发过程做了详细的介绍,并对系统的原理、总体设计等方面做了深入细致的讨论。内容采用结构化分析和设计方法,运用linux C开发实现本次操作系统设计的4个任务。主要任务1、设计一个程序,要求创建一个管道,复制进程,父进程往管道中写入字符串,子进程从管道中读取并输出字符串。2、设计一个程序,要求复制进程,子进程显示自己的进程号(PID)后暂停一段时间,父进程等待子进程正常结束,打印显示等待的进程号(PID)和等待的进程退出状态。3、用管道实现ls|sort命令功能。4、设
3、计一个程序,要求用户进程复制出一个子进程,父进程向子进程发出信号,子进程收到此信号,结束子进程。正文(课程设计的主要内容,包括实验与观测方法和结果、仪器设备、计算方法、编程原理、数据处理、设计说明与依据、加工整理和图表、形成的论点和导出的结论等。正文内容必须实事求是、客观真切、准确完备、合乎逻辑、层次分明、语言流畅、结构严谨,符合各学科、专业的有关要求。)1. 需求分许(1)、设计一个程序,要求创建一个管道,复制进程,父进程往管道中写入字符串,子进程从管道中读取并输出字符串。(2)、设计一个程序,要求复制进程,子进程显示自己的进程号(PID)后暂停一段时间,父进程等待子进程正常结束,打印显示等
4、待的进程号(PID)和等待的进程退出状态。(3)、用管道实现ls|sort命令功能。(4)、设计一个程序,要求用户进程复制出一个子进程,父进程向子进程发出信号,子进程收到此信号,结束子进程。2. 系统设计(1) 第一个任务进程间通信程序结构及主要过程 本程序运用了顺序结构,选择结构等c语言主要结构,指针、函数调用等知识,该程序覆盖了linuxc语言所学的除结构体外的大部分知识。本程序结构和过程思路: 利用fork函数复制进程,父进程往管道中写入字符串,子进程从管道中读取并输出字符串(2) 第二个任务进程控制程序结构及主要过程本程序运用了顺序结构,选择结构等c语言主要结构,指针、函数调用等知识,
5、该程序覆盖了linuxc语言所学的除结构体外的大部分知识。本程序结构和过程思路如下:利用fork函数复制进程,再利用getpid函数获取子进程的进程号,同时也利用了wait函数来等待进程。(3) 第三个任务结构及主要过程本程序运用了顺序结构,选择结构等c语言主要结构,指针、函数调用等知识,该程序覆盖了linuxc语言所学的除结构体外的大部分知识。本程序结构和过程思路:利用fork函数复制进程,调用run_ls和run_sort函数实现linux下ls|sort命令,对当前目录进行操作。(4) 第四个任务进程控制程序结构及主要过程本程序运用了顺序结构,选择结构等c语言主要结构,指针、函数调用等知
6、识,该程序覆盖了linuxc语言所学的除结构体外的大部分知识。本程序结构和过程思路:利用fork函数复制进程,父进程打印进程信息并且signol函数通知子进程,子进程收到父进程的信号后打印结束进程的提示然后结束进程,打印信息。3. 系统实现(1)进程间通信实现源代码:#include #include #include #include int main(int argc,char *argv) int pd2;/*用于保存管道文件描述符*/ char out80,str=hello flami!;/*str是要写入的字符串,out用于保存从管道读取的字符串*/ assert(pipe(pd)
7、!=-1);/*断言用于确定pipe()函数执行成功,如果管道创建失败,则pipe()返回-1*/ if (!fork() write(pd1,str,strlen(str);/*父线程将字符串写入管道*/ else read(pd0,out,strlen(str);/*在子线程中从管道中读取子进程写入的字符串*/ printf(%sn,out);/*子线程中输出。*/ return 0;(2)进程控制实现源代码:#include#include#include#include#includeint main() pid_t pid,vpid;int status,i;pid=fork();i
8、f(pid=0) printf(子进程pid:%dn,getpid();sleep(2);exit(3);elsevpid=wait(&status);i=WEXITSTATUS(status); printf(父进程pid:%d,退出状态%dn,vpid,i);(3)管道实现ls|sort命令#include int fd2; void run_ls() close(fd0); close(fd1); char *argv=ls,NULL,NULL;/传递给执行文件的参数数组,这里包含执行文件的参数 char *envp=0,NULL;/传递给执行文件新的环境变量数组 execve(/bin
9、/ls,argv,envp); void run_sort() close(fd0); close(fd1); char *argv=sort,NULL,NULL;/传递给执行文件的参数数组,这里包含执行文件的参数 char *envp=0,NULL;/传递给执行文件新的环境变量数组 execve(/usr/bin/sort, argv, envp); int main() pipe(fd); if (fork() 0) dup2(fd1, 1); run_ls(); else dup2(fd0, 0); close(fd0); close(fd1); pipe(fd); if (fork()
10、 0) dup2(fd1, 1); run_sort(); else dup2(fd0, 0); run_sort(); return 0; (4) 第四个任务源代码#include #include #include #include #include void handler(int signo) printf(this is child process,pid=%d ,parent id=%d n,getpid(),getppid(); int main() int pid; pid=fork(); if(pid0) perror(fork error); else if(pid=0)
11、signal(SIGUSR1,handler); pause(); printf(child process exitn); exit(0); else int status; printf(this is parent process,pid=%d ,parent id=%d n,getpid(),getppid(); printf(waiting for child process exitn); kill(pid,SIGUSR1); wait(&status); printf(the child process exit,the return status is 0 x%xn,statu
12、s); pause(); return 0; 系统测试(1) 运行结果umrlocalhost Documents$ vi demo01.cumrlocalhost Documents$ gcc -o demo01 demo01.cumrlocalhost Documents$ ./demo01hello flami!结果分析这是一个进程控制程序,要求创建一个管道,复制进程,父进程往管道中写入字符串,子进程从管道中读取并输出字符串。经过测试,该程序基本实现了以上功能,且计算结果合理正确,满足实验要求。(2) 试验过程及结果umrlocalhost Documents$ vi demo02.cu
13、mrlocalhost Documents$ gcc -o demo02 demo02.cumrlocalhost Documents$ ./demo02子进程pid:14004父进程pid:14004,退出状态3 结果分析这是一个进程控制程序,要求完成复制进程,子进程显示自己的进程号(PID)后暂停一段时间,父进程等待子进程正常结束,打印显示等待的进程号(PID)和等待的进程退出状态。经过测试,该程序基本实现了以上功能,且计算结果合理正确,满足实验要求。(3) 试验过程及结果umrlocalhost Documents$ vi demo03.cumrlocalhost Documents$
14、gcc -o demo03 demo03.cumrlocalhost Documents$ ./demo03demo01demo01.cdemo02demo02.cdemo03demo03.cdemo04demo04.c结果分析:程序利用fork函数复制进程,调用run_ls和run_sort函数实现linux下ls|sort命令,对当前目录进行操作。基本完成程序设计要求,且结果正确合理,满足实验要求。(4) 试验过程及结果umrlocalhost Documents$ ./demo04this is parent process,pid=4010 ,parent id=3693 waitin
15、g for child process exitthe child process exit,the return status is 0 xa结果分析这是一个进程控制软件,要求复制一个子进程,要求父进程发送一个信号给子进程,发送时打印提示,然后子进程收到信号后打印提示结束进程,结束完成后打印测试结果。程序基本已实现程序要求,结果正确合理,满足实验要求。结论(应当准确、完整、明确精练;也可以在结论或讨论中提出建议、设想、尚待解决问题等。)设计过程中的感受与体会从程序的整体构思到程序的算法设计及程序的编写再到最后程序的调试,我经历了重重困难和考验,但是我并没有放弃,我运用本学期所学到的知识和课外的一些知识,从想到查再到问,最后完成了这个4个程序。在设计过程中,我不仅仅是完成了程序,更重要的是我在这次设计中巩固了linuxc所学到的知识,锻炼了自己的实践能力;另外在这次设计的过程中,我懂得了在设计遇到困难的时候怎样去解决这个困难。从书上网上查阅资料,向比我们知识丰富的人虚心请教,这是我们解决问题的主要方法,这样也同时扩宽了我们的知识面,打破了课堂的局限,在以后的人生道路中,我们也应该保持住这种精神。只要这样我们相
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铁路轨道紧固件制造考核试卷
- 医疗隐私保护的法律规定-洞察分析
- 物联网边缘数据处理-第1篇-洞察分析
- 2024-2025学年高一上学期第三次月考生物试题02(人教版2019)(解析版)
- 虚拟现实在出版领域的应用-洞察分析
- 医疗器械生物相容性-洞察分析
- 建筑施工技术论文范文
- 2023-2024学年山西省部分学校高一1月期末考试生物试题(解析版)
- 烟草种植土壤改良技术-洞察分析
- 陶瓷废水处理技术-洞察分析
- 2024-2030年中国高密度聚乙烯管道行业发展展望与投资策略建议报告
- 2024-2030年中国醋酸乙烯行业运营状况与发展风险评估报告
- 企业文化塑造与员工激励方案
- 2024年01月22504学前儿童科学教育活动指导期末试题答案
- 2023-2024学年贵州省遵义市新蒲新区八年级(上)期末数学试卷(含答案)
- 多发性神经病护理
- 【MOOC】线性代数-浙江大学 中国大学慕课MOOC答案
- 开门红包费用申请
- 区块链原理与实践全套完整教学课件
- 运动神经元病小讲课
- 工会的财务管理制度〔13篇〕
评论
0/150
提交评论