您好,欢迎来到好走旅游网。
搜索
您的当前位置:首页课程设计报告(系统软件实践)

课程设计报告(系统软件实践)

来源:好走旅游网
北京化工大学北方学院

课程设计报告

课程名称 系统软件实践 设计题目 Linux C 程序设计 专业、班级 软件1004 学 号 100220119 姓 名 张雄飞 指导教师 马睿 设计时间 2013年10月8日--2013年10月27日

2013年 10月 27 日

1

一、 引言(简要说明设计题目的目的、意义、内容、主要任务等) 1.1设计目的 本次系统软件课程设计的主要目的有两个:一方面是分析设计linux源代码,另一方面是进行系统级的程序设计。 1.2 主要任务 (1)编写程序,输入一个十进制整数,将其变换为二进制后存储在一个数组中。并用make工程管理器编译。(注意分割文件,可参考第一题的提示。)编写makefile文件。 (2)设计一个程序,要求利用read函数读取系统文件“/etc/passwd”,并在终端中显示输出。 (3)设计一个程序,要求复制进程,子进程显示自己的进程号(PID)后暂停一段时间,父进程等待子进程正常结束,打印显示等待的进程号(PID)和等待的进程退出状态。 (4)设计一个程序,要求创建一个管道,复制进程,父进程往管道中写入字符串,子进程从管道中读取并输出字符串。 1.3题目设计意义 ⑴通过本课题的毕业设计,熟悉了关于linux下C语言的系统软件程序设计,可以比较深入的了解和掌握基本gcc,vim等编程软件的使用和对makefile文件的使用。 ⑵掌握进程间的通信方式,进程控制,文件操作的方式。 ⑶本报告就系统的开发过程做了详细的介绍,并对系统的原理、总体设计等方面做了深入细致的讨论。 二、 正文(课程设计的主要内容,包括实验与观测方法和结果、仪器设备、计算方法、编程原理、数据处理、设计说明与依据、加工整理和图表、形成的论点和导出的结论等。正文内容必须实事求是、客观真切、准确完备、合乎逻辑、层次分明、语言流畅、结构严谨,符合各学科、专业的有关要求。) 任务一:十进制和二进制的转换 2.1、主要内容 2.1.1本程序够分为两个模块:转换模块和数字输入模块;下面分别对这两个模块的算法做一下介绍。 (1)转换模块:利用十进制转换二进制规则,也就是将输入的十进制数字除二取余。直到商为零为止。然后倒序输出余数。 (2)数字输入模块:利用scanf函数输入一个整数,然后传递给转换函数。 以上为程序的模块说明。 1.1.2程序结构及主要过程 (1)此成熟包含了循环结构,顺序结构等在c语言中的主要结构。其中穿插着函数调用,数组等linux c语言的大部分知识。 (2)本程序结构和过程思路如下:由main函数接受一个十进制的整数(正整数,负整数都可),再由转换函数进行转换和输出对应的二进制。 1.1.3makefile介绍 ⑴Makefile文件介绍 Makefile一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 ⑵makefile主要功能 Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。而makefile 文件需要按照某种语法进行编写,文件中需要说明如

2

何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。makefile 文件是许多编译器--包括 Windows NT 下的编译器--维护编译信息的常用方法,只是在集成开发环境中,用户通过友好的界面修改 makefile 文件而已。 ⑶自动化编译 Makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,可见,makefile都成为了一种在工程方面的编译方法。 2.1.4 makefile规则 makefile中的规则是这样的: TARGET „ : DEPENDENCIES „ COMMAND „ 目标(TARGET)程序产生的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如“clean”。 依赖(DEPENDENCIES)是用来产生目标的输入文件,一个目标通常依赖于多个文件。 命令(COMMAND)是make执行的动作,一个可以有多个命令,每个占一行。注意:每个命令行的起始字符必须为TAB字符! 有依赖关系规则中的命令通常在依赖文件变化时负责产生target文件,make执行这些命令更新或产生target。规则可以没有依赖关系,如包含target “clean”的规则。 规则解释如何和何时重做该规则中的文件,make根据依赖关系执行产生或更新目标;规则也说明如何和何时执行动作。有的规则看起来很复杂,但都符合上述模式。 makefile中的规则描述如何生成特定的文件,即规则的目标。规则列出了目标的依赖文件,指定生成或更新目标的命令。规则的次序是不重要的,除非是确定缺省目标:缺省目标是第一个makefile中的第一个规则;如果第一个规则有多个目标,第一个目标是缺省的。有两个例外:以’.’开头的目标不是缺省目标;模式规则对缺省目标没有影响。通常我们所写的地一个规则是编译整个或makefile中指定的所有程序。 2.1.5 Makefile文件 main:main.o zhuanhuan.o gcc -o main main.o zhuanhuan.o main.o:main.c gcc -c main.c zhuanhuan.o:zhuanhuan.c gcc -c zhuanhuan.c echo: echo this is a zhuanhuan clear: rm main mian.o zhuanhuan.o 2.1.6 源程序 #include int main() { int i; printf(\"清输入一个十进制数字:\");

3

scanf(\"%d\ zhuanhuan(i); return 0; } #include int zhuanhuan(int i) { int k,l; int a[30]; for(l=0;l<30;l++) a[l]=0; if(i>0){ int b=0; do{k=i%2; i=i/2; a[b++]=k; }while(i!=0); for(l=b;l>=0;l--) printf(\"%d\} else { int b=0; i=-i; do{k=i%2; i=i/2; a[b++]=k; }while(i!=0); a[b+1]=1; for(l=b+1;l>=0;l--) printf(\"%d\} return 0; } 2.1.7 试验过程及结果 (1)运行make: 4

(2)输入十进制6 2.1.8结果分析 这是一个十进制转换二进制程序,能根据用户输入的十进制转换为对应的二进制数字。经过测试本程序能够实现以上功能。 任务二:使用read函数读取系统文件 2.2、主要内容 2.2.1本程序只有一个模块,下面分别对这个模块的算法做一下介绍。 在main函数里面利用read函数读取系统文件“/etc/passwd”,并在终端中显示输出。 2.2.2 程序结构及主要过程 ⑴本程序共包含了顺序结构这种在 C 程序中的主要结构,指针、函数调用等知识,该程序覆盖了linux c语言所学的除结构体外的大部分知识。 ⑵本程序结构和过程思路如下:在main函数里面利用read函数读取系统文件“/etc/passwd”,并在终端中显示输出。 2.2.3程序源代码 #include #include #include #include #include int main() { int fd,size; char buffer[80]; fd=open(\"./etc/passwd\Y); size=read(fd,buffer,sizeof(buffer)); close(fd); printf(\"%s\

5

return 0; } 2.2.4运行结果 2.2.5结果分析 这是一个利用read函数读取系统文件的程序,要求完成读取和显示“/etc/passwd”。(因为读取的是密码文件所以会出现加密乱码情况!)经测试该程序基本实现了以上功能,且计算结果合理正确,满足实验要求。 任务三:进程控制 2.3.1主要内容 设计一个程序,要求复制进程,子进程显示自己的进程号(PID)后暂停一段时间,父进程等待子进程正常结束,打印显示等待的进程号(PID)和等待的进程退出状态。 2.3.2 程序结构及主要过程 (1)本程序运用了顺序结构,选择结构等c语言主要结构,指针、函数调用等知识,该程序覆盖了linux c语言所学的除结构体外的大部分知识。 (2)本程序结构和过程思路如下:利用fork函数复制进程,再利用getpid函数获取子进程的进程号,同时也利用了wait函数来等待进程。 2.3.3程序源码 #include #include #include #include int main() { pid_t pid,vpid; int status,i; pid=fork(); if(pid==0) { printf(\"子进程pid:%d\\n\sleep(2); exit(3); } else { vpid=wait(&status); i=WEXITSTATUS(status); printf(\"父进程pid:%d,退出状态%d\\n\}

6

} 2.3.4 试验过程及结果 [abc@localhost ~]$ gcc 4.c [abc@localhost ~]$ ./a.out 子进程pid:3047 父进程vpid:3047,退出状态3 [abc@localhost ~]$ 2.3.5 结果分析 这是一个进程控制程序,要求完成复制进程,子进程显示自己的进程号(PID)后暂停一段时间,父进程等待子进程正常结束,打印显示等待的进程号(PID)和等待的进程退出状态。。 经过测试,该程序基本实现了以上功能,且计算结果合理正确,满足实验要求。 任务四:进程间通信 2.4主要内容 2.4.1程序要求 设计一个程序,要求创建一个管道,复制进程,父进程往管道中写入字符串,子进程从管道中读取并输出字符串。 4.4.2程序结构及主要过程 (1)本程序运用了顺序结构,选择结构等c语言主要结构,指针、函数调用等知识,该程序覆盖了linux c语言所学的除结构体外的大部分知识。 (2)本程序结构和过程思路如下: 4.1.3程序源码 #include #include #include Int main(void) { Int n,fd[2]; Pid_t pid; Char line[80]; If(pipe(fd)<0) { Printf(“pepe error\\n”); Exit(1); } Pid=fork(); If(pid<0) { Printf(“fork error\\n”); Exit(1); } Else if(pid==0) {close(fd[1]); If((n=read(fd[0],line,80))>0) Printf(“子进程从管道读取%d个字符,读取字符串是:%s\\n”,n,line);

7

Close(fd[0]); } Else { Close(fd[0]); If(write(fd[1],”hello!”,6)!=-1) Printf(“父进程向管道写入“hello!”\\n”); Close(fd[1]); Waitpid(pid,NULL,0); } exit (0); } 2.4.4运行结果 [abc@localhost ~]$ gcc 4.c [abc@localhost ~]$ ./a.out 父进程向管道写入hello! 子进程从管道读取6个字符,读取字符串是:hello! [abc@localhost ~]$ 2.4.5结果分析 这是一个进程控制程序,要求创建一个管道,复制进程,父进程往管道中写入字符串,子进程从管道中读取并输出字符串。 经过测试,该程序基本实现了以上功能,且计算结果合理正确,满足实验要求。。 三、 结论(应当准确、完整、明确精练;也可以在结论或讨论中提出建议、设想、尚待解决问题等。) 3.1设计过程中的感受与体会 为了增强我们的C程序的实际操作与设计能力我编写了这个答题系统,下面就来谈下我在这次程序设计过程中的感受与体会。从程序的整体构思到程序的算法设计及程序的编写再到最后程序的调试,我经历了重重困难和考验,但是我并没有放弃,我运用本学期所学到的知识和课外的一些知识,从想到查再到问,最后完成了该系统。在设计过程中,我不仅仅是完成了若干个系统,更重要的是我在这次设计中巩固了linux c所学到的知识,锻炼了自己的实践能力;另外在这次设计的过程中,我懂得了在设计遇到困难的时候怎样去解决这个困难。从书上网上查阅资料,向比我们知识丰富的人虚心请教,这是我们解决问题的主要方法,这样也同时扩宽了我们的知识面,打破了课堂的局限,在以后的人生道路中,我们也应该保持住这种精神。只要这样我们相信今后我们的人生道路会像这次程序设计一样取得成功。以上就是我在这次程序设计过程中的感受与体会。 3.2遇到的问题与解决方法 在设计本系统的过程中,并不是一帆风顺的,设计与调试期间我也遇到了很多困难,现在就将我遇到的困难和困难的解决方法列出。 ⑴在做到第三个关于管道的时候出现了游离错误,但是经过老师和同学的帮助,再加上自己的仔细查找得知在read函数多出一个分号。这个小小的粗心大意花费了我大量的时间。我要以以此为戒,以后一定认真完成每一件事。 ⑵在完成十进制和二进制转换的问题时候由于自己前期的准备不够充分,没有把逻辑结构想清楚,想明白。使得自己在编程过程中出现了很多逻辑的错误。同时也出现了数组的地址越界问题,这是由于自己对对for循环的把握不够准确,以后要加强这方面的练习。

8

(3)由于自己的本省机器是windos系统,而做的项目是linux软件所以在读码方式上出现了不同导致自己在linux编写的程序,要想在windos下显示则会出现乱码的现象。但是经过大量的实验发现只有中文辉乱码而英文不会。 四、 参考文献 [1] 谭浩强.C程序设计(第三版).清华大学出版社.2005 [2] 杨树青,王欢. Linux环境下C编程指南.清华大学出版社.2007 [3] 余祥宣,崔国华,邹海明.计算机算法基础(第三版).华中科技大学出版社.2006 [4] 陈博,孙宏彬,於岳. Linux实用教程.人民邮电出版社.2008 [5] 赵克林,游祖元. C语言实例教程.西南师范大学出版社.2006 五、 指导教师评语 签名: 年 月 日 课程设计成绩(五级分制) 9

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- haog.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务