系统软件课程设计报告linux下的c语言设计_第1页
系统软件课程设计报告linux下的c语言设计_第2页
系统软件课程设计报告linux下的c语言设计_第3页
系统软件课程设计报告linux下的c语言设计_第4页
系统软件课程设计报告linux下的c语言设计_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、北京化工大学北方学院课程设计报告课程名称 系统软件课程设计 设计题目 linux下的c语言设计 专业、班级 学 号 姓 名 指导教师 设计时间 年 月 日一、 引言(简要说明设计题目的目的、意义、内容、主要任务等)1. 设计目的linux/unix操作系统课程设计是在完成理论课程学习之后安排的综合实践训练,通过几周的综合课程设计,在学生掌握linux的基本知识及常用的操作命令基础上,提高学生对所学知识的应用能力,特别是:煅炼学生搜集有关linux资料,在资料文档的帮助下,运用linux的基本知识及常用的操作命令来解决问题的能力。2. 设计要求通过几周的综合课程设计,要求能完成给定的任务,并写出

2、相应的课程设计总结报告1、根据合理的进度安排,按照程序的流程及方法,踏实地开展课程设计活动。2、课程设计过程中,在设计各环节中撰写相关的技术文档,最后要求提交详细的课程设计报告。3、开发出可以运行的机房辅助管理系统,通过上机检查。3. 设计的主要内容 1、制作一个可供小学数学运算的程序:10以内加减法,能根据输入题数出题,判断题是否正确,最后计算分数。例如:请输入题数:21+5=2+4=由用户输入答案,程序根据答案判断正误,输出正确率(%)。并用make工程管理器编译。(注意分割文件,可参考第一题的提示。)编写makefile文件。(难度系数:2) 2、设计一个程序,要求利用read函数读取系

3、统文件“/etc/passwd”,并在终端中显示输出。3、设计一个程序,程序在运行时,能执行vim程序,即创建一个新的进程,并用ps命令查看程序的进程号与vim的进程号。(难度系数:1)4. 设计的主要任务 认真写文档,熟悉linux下的操作,掌握linux的基本知识及常用的操作命令,运用linux的基本知识及常用的操作命令来解决问题的能力。二、 正文(课程设计的主要内容,包括实验与观测方法和结果、仪器设备、计算方法、编程原理、数据处理、设计说明与依据、加工整理和图表、形成的论点和导出的结论等。正文内容必须实事求是、客观真切、准确完备、合乎逻辑、层次分明、语言流畅、结构严谨,符合各学科、专业的

4、有关要求。)1. makefile文件介绍makefile文件 makefile 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个shell脚本一样,其中也可以执行操作系统的命令。 1.1 makefile主要功能 make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。而makefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可

5、执行文件,并要求定义源文件之间的依赖关系。makefile 文件是许多编译器-包括 windows nt 下的编译器-维护编译信息的常用方法,只是在集成开发环境中,用户通过友好的界面修改 makefile 文件而已。 1.2 自动化编译 makefile带来的好处就是“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的ide都有这个命令,比如:delphi的make,visual c+的nmake,linux下gnu的make。可见,makefile都成为了一种

6、在工程方面的编译方法。 1.3 课程题目要求制作一个可供小学数学运算的程序:10以内加减法,能根据输入题数出题,判断题是否正确,最后计算分数。例如:请输入题数:21+5=2+4=由用户输入答案,程序根据答案判断正误,输出正确率(%)。并用make工程管理器编译。(注意分割文件,可参考第一题的提示。)编写makefile文件。(难度系数:2)1.4 实现myhead.h/* myhead.h */#ifndef myhead_h#define myhead_hextern int question(int);extern int input(void);#endif main.c #includ

7、e #include #include #include myhead.hint main(int argc,char *argv)int i;int k;int j = input();int correctnum = question(j);float f = correctnum/(j*1.0);printf(the correct answer rate is %0.2fn,f*100);exit(0);input.c #include #include int input(void)int j;while(1)printf(please input the number of que

8、stions: );if(!scanf(%d,&j)printf(please input the correct number,and the programe is shutdown nown);exit(0);elsebreak;return j; chute.c #include #include int question(int questionnum)int i;int k;int q1;int q2;int the_true_answer_number=0;srand(unsigned)time(null);for(i=0;iquestionnum;i+)q1 = rand()%

9、10;q2 = rand()%10;printf(%d+%d=,q1,q2);scanf(%d,&k);if(k=q1+q2)the_true_answer_number+=1;return the_true_answer_number; all.c #include #include static int the_true_answer_number = 0;int main(int argc,char *argv)int i;int j;int k;int q1;int q2;srand(unsigned)time(null);printf(please input the number

10、of questions: );scanf(%d,&j);for(i=0;ij;i+)q1 = rand()%10;q2 = rand()%10;printf(%d+%d=,q1,q2);scanf(%d,&k);if(k=q1+q2)the_true_answer_number+=1;float f = the_true_answer_number/(j*1.0);printf(the correct answer rate is %0.2fn,f*100);exit(0); makefile文件 main:main.o input.o chuti.ogcc main.o input.o c

11、huti.o -o mainmain.o:main.c myhead.hgcc -c main.cinput.o:main.cgcc -c input.cchuti.o:main.cgcc -c chuti.c2. 文件操作2.1 课程题目要求设计一个程序,要求利用read函数读取系统文件“/etc/passwd”,并在终端中显示输出。2.2 实现#include#include#includemain()int fd,size;char buffer80;fd=open(/etc/passwd,o_rdonly);size=read(fd,buffer,sizeof(buffer);clos

12、e(fd);printf(“%s”,buffer);3. 进程控制3.1 进程简介进程是一个程序的一次执行的过程。在linux环境下,每个正在运行的程序都称为进程。每个进程包含进程标识符及数据,这些数据包含进程变量、外部变量及进程堆栈等。3.1.1进程与程序由于一个进程对应一个程序的执行,但进程不等同于程序。因为程序是静态的概念,进程是动态的概念。进程是程序执行的过程,包括了动态创建、调度和消亡的整个过程。进程是程序执行和资源管理的最小单位。对系统而言,当用户在各级系统中键入命令执行一个程序的时候,它将启动一个进程,因此,一个程序可以对应多个进程。3.1.2 linux环境下的进程管理linu

13、x环境下的进程管理包括启动进程和调度进程。启动进程有两种主要途径:手工启动和调度启动。(1)手工启动又可分为前台启动和后台启动。前台启动:是手工启动一个进程的最常用方式。一般地,当用户输入一个命令时,就已经启动了一个进程,并且是一个前台的进程。后台启动:往往是在该进程非常耗时,且用户也不急着需要结果的时候启动。一般地,当用户输入一个命令结尾加上一个“&”号,就是后台启动一个进程。(2)调度启动有时系统需要进行一些比较费时而且占用资源的维护工作,并且这些工作适合在深夜无人职守的时候进行,这时用户就可以事先进行调度安排,指定任务运行的时间或者场合,到时候系统就会自动完成这一切工作。调度进程包括对进

14、程的中断操作、改变优先级、查看进程状态等。linux环境下在进程启动时,系统会分配一个唯一的数值给每个进程,这个数值就称为进程标识符。在linux中最主要的进程标识有进程号(pid)和它的父进程号(ppid)。 pid惟一地标识一个进程。 pid和ppid都是非零的正整数。 在linux中获得当前进程的pid和ppid的系统调用函数为getpid和getppid函数。3.2 课程题目要求设计一个程序,程序在运行时,能执行vim程序,即创建一个新的进程,并用ps命令查看程序的进程号与vim的进程号。(难度系数:1)3.3 实现#include /*文件预处理,包含标准输入输出库*/#includ

15、e /*文件预处理,包含getpid、getppid函数库*/int main()/*c程序的主函数,开始入口*/ char *args = /usr/bin/vim,null; printf(系统分配的进程号(pid)是:%dn,gitpid();/*显示输入进程号*/ if(execve(/usr/bin/vim,args,null)0)/*调用vim程序,创建新进程*/ perror(用execve创建进程出错); return 1;3.4 分析编译、运行程序,系统会出现运行结果,先显示linux系统分配的进程号(pid),接着运行vim程序,创建新的进程。再打开一个终端,用ps查看原进

16、程和新创建进程的进程号(pid)。可以看到,在新进程创建后,原来的进程已经终止了。在用execve函数创建新进程后,会以新的程序取代原来的进程,然后系统会从新进程运行,但是新进程的pid值会与原来进程的pid值相同。一般情况下,在运行execve函数后是不会返回原进程的,只有在错误时才会返回-1,所以在原进程中的execve函数下方,加入perror函数,输出错误信息,并返回1,表示有错误发生。三、 结论(应当准确、完整、明确精练;也可以在结论或讨论中提出建议、设想、尚待解决问题等。)该实验包括三部分,makefile文件、文件操作、进程控制。 这一次课程设计,让我体会很深刻。总的感觉,学到了

17、很多知识,特别对于linux有了全面的接触和了解,也开始对linux产生了兴趣,它所开放的源码的确为学计算机的同志们提供了很好的平台。首先,从第一个实验中,对于程序来说是很简单的,主要的目的是写makefile文件,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个shell脚本一样,其中也可以执行操作系统的命令。make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。而makefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。 其次,从第二个实验中,熟悉了文件的操作。第一个实验相对很简单,当然,学到的知识也有限。应该说时间花的很多的是第二个实验,其实,现在回想起来,觉得很不值,因为第二个也没什么技术含量,只是明白了文件的写的过程。再次,从第三个实验中,熟悉了进程的操作。相对于前两个实验,第三个实验是第一次接触,对进程的操作还是第一次研究,因此花的最多的时间就在第三个实验上了,经过对文档的学习,还是初步懂得了怎样对进程操作,学会

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论