系统课程设计

上传人:壹****1 文档编号:560330041 上传时间:2023-07-11 格式:DOCX 页数:9 大小:174.18KB
返回 下载 相关 举报
系统课程设计_第1页
第1页 / 共9页
系统课程设计_第2页
第2页 / 共9页
系统课程设计_第3页
第3页 / 共9页
系统课程设计_第4页
第4页 / 共9页
系统课程设计_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《系统课程设计》由会员分享,可在线阅读,更多相关《系统课程设计(9页珍藏版)》请在金锄头文库上搜索。

1、北京化工大学北方学院课程设计报告课程名称设计题目linux环境下c程序设计专业、班级学 号080203115姓 名指导教师马睿设计时间2011年09月-2011年10月2011年 10 月 10 日一、引言(简要说明设计题目的目的、意义、内容、主要任务等)1、目的:linux是一操作系统,其本质是一系列的任务调度,内存管理,虚拟文件系统等算法的集合. 它告诉你的计算机怎么充分利用你机器上的资源.linux内核的源代码是用C语言写的(源代码也 见于pub.kernel.org).C语言是一门编程语言,其本质是把一些C语言关键词描述的算法转换为 计算机可以直接运行的二进制机器语言的整体想把C语言写

2、成的代码编译成二进制机器语言要使用C编译器(C compiler),C编译器是一个软件,它可以 把C语言写成的代码转换成机器可以执行的二进制文件.。2、意义:Linux是目前非常流行的一款操作系统,而C语言是Linux操作系统中的核心语言,掌握 Linux环境下的C语言开发有着非常重要的意义。我们在linux下做任何事都离不开C。3、内容:(1)根据输入的三角形的三边判断是否能组成三角形,若可以则输入它的面积和三角形的 类型。并用make工程管理器编译。(2)设计一个程序,要求打开文件“pass”,如果没有这个文件,新建此文件;读取系统 文件“/etc/passwd”,把文件中的内容都写入“p

3、ass”文件。(3)利用命名管道实现两个进程间的通信4、主要任务:第一部分第五题:此题目要求从键盘先输入三个数,要求按照输入的数据判断是否能 组成三角形,如果可以,则根据面积s= Vp (p-a) (p-b) (p-c)计算三角形的面积,并输出该面 积。(其中p为三边和的均值,a、b、c为三角形的三边)。第二部分第六题:此题目要求查询一个文件,如果没有则创建该文件。然后读取/etc/passwd” 文件,然后将该文件内容读入到刚刚创建的文件中。第四部分第八题:此题目要求实现进程间的通信,如:1. 父进程调用pipe开辟管道,得到两个文件描述符指向管道的两端。2. 父进程调用fork创建子进程,

4、那么子进程也有两个文件描述符指向同一管道。3. 父进程关闭管道读端,子进程关闭管道写端。父进程可以往管道里写,子进程可以从管道里 读,管道是用环形队列实现的,数据从写端流入从读端流出,这样就实现了进程间通信。二、正文(课程设计的主要内容,包括实验与观测方法和结果、仪器设备、计算方法、编程 原理、数据处理、设计说明与依据、加工整理和图表、形成的论点和导出的结论等。正文 内容必须实事求是、客观真切、准确完备、合乎逻辑、层次分明、语言流畅、结构严谨, 符合各学科、专业的有关要求。)I、根据输入的三角形的三边判断是否能组成三角形,若可以则输入它的面积和三角形的类型。 并用make工程管理器编译。流程图

5、:1魯三炉琏豆加5um2=4: jum3=:直能三A那.,一腔三角臧,函数关系:1、主函数main()在main ()中定义了三角型三边长度float型变量a, b, c。 并调用isDelta(),将a, b, c作为函数参数传递给isDelta ()。2、函数 isDelta ()接收参数a,b,c。计算并输出三角形面积 mianji二 sqr t(s*(s-a)*(s-b)*(s-c)。判断三角形类型,并输出其类型。关键代码:main.c#includestdio.h#include sys/math.hint main()int number;printf(please input t

6、hree number:);double a,b,c;scanf(%f%f%f, &a, &b, &c);isDel ta(a,b,c);isDel ta.c#includemath.hvoid isDel ta(double a,double b, double c) if(a+b二c| a+c二b & b+c=a)prin tf(不可以组成三角形n);float s = 1/2 *(a+b+c);float mianji = sqrt( s*(s-a)*(s-b)*(s-c);prin tf(三角形面积:fn, mianji);if(a=b | a= c | b=c)prin tf(三角类

7、型:等腰n);if(a=b & a= c & b=c)prin tf(三角类型:等边n);float a2 = a*a;float b2 = b*b;float c2 = c*c;if(a2+b2 = c2 | a2+c2=b2 | b2+c2=a2)prin tf(三角类型:直角n); Makefile 规则:宏定义命令行中执行makefile源文件之间的相互依赖关系可执行的命令Makefile中允许使用简单的宏指代源文件及其相关编译信息,在Linux中也称 宏为变量。在引用宏时只需在变量前加$符号,但值得注意的是,如果变量名的长度超过一个字 符,在引用时就必须加圆括号()。Makefile

8、 文件:main:isDel ta.o main.ogcc isDel ta.o main.oisDel ta.o:isDel ta.cgcc isDel ta.c -cmain.o:main.cgcc main.c - c测试结果:调用函数fopen ()判断pass文件是否存在,存在则打开,不存在则创建。调用fread ()函数读取文件内容到str。调用fwrite ()函数将内容写入pass文件。 代码:file.c#include #include sys/stat .h#include fcntl .hmain()int fd,size;char str1234=0;/查找是否有pa

9、ss文件,如果没有则创建pass文件,否则打开文件stream1=fopen(pass,w);stream=fopen(/etc/passwd,r);/读取系统文件的内容fread(s tr ,sizeof(char),l,p)/将系统文件的内容写入到pass文件上。fwrit e(s tr ,sizeof(char),l,s tr eaml);/关闭文件fclose(stream); fclose(streaml); 运行结果:rootlocalhost 1.1# cd /mnt/hgfs/Share/paohui/2.4rootlocalhost 2.4# makemake: wrt. o

10、ut是最新的。roottalocalhost 2.4# IsHello makefile wrt.c wrt.o wrt.outrootlocalhost 2.4# ./wrt.outSuccess Write Irootlocalhost 2.4# |此题目实现对文件的操作,读取文件以及实现对文件的读取和写入先判断文件是否存在,如 果不存在则创建此文件。然后用fread ()读取系统文件。将系统文件内容用fwrite ()方法写 入pass文件。III、利用命名管道实现两个进程间的通信. 函数关系:(1) main ()定义整形数组pipe_fd.字符数组r_buf.字符数组指针w_buf。

11、定义整形变量childexit, i, cmd。调用write()函数向管道写数据。调用read ()函数从管道读数据。调用close ()函数关闭管道。关键代码:#include unis td.h #include int main()int pipe_fd2;pid_t pid;char r_buf4;char* w_buf256;int childexit=O;int i;int cmd;memse t(r _buf,0,sizeof(r_buf);if(pipe(pipe_fd)O)printf (pipe create errorn);return T;if(pid=fork()=

12、0)/子进程:解析从管道中获取的命令,并作相应的处理printf(n);close(pipe_fd1);sleep(2);while(!childexit)read(pipe_fd0,r_buf,4);cmd=atoi(r_buf);if(cmd=0)printf (child: receive command from parent overn now child process exitn); childexit=l;else if(handle_cmd(cmd)!=0)return;sleep(1);close(pipe_fd0);exi t(0);else if(pid0)/paren

13、t: send commands to childclose(pipe_fd0);w buf0=003;w_bufl=005;w_buf2=777;w_buf3=000; for(i=0;i4;i+)writ e(pipe_fdl,w_bufi,4); close(pipe_fdl);return 0;/下面是子进程的命令处理函数(特定于应用): int handle_cmd(int cmd)if (cmd0)|(cmd256)/suppose child only support 256 commandsprintf (child: invalid command n); return T;

14、printf (child: the cmd from parent is %dn, cmd); return 0;测试结果:三、结论(应当准确、完整、明确精练;也可以在结论或讨论中提出建议、设想、尚待解决 问题等。)对于linux的学习,时间比较紧促,只是接触到了庞大知识体系的很小一部分,但是,通过自 学,加之自己的专业基础知识,已经可以读懂并编写简单的linux环境下的c语言程序 由于c语言的学习的间隔的时间比较长,有些知识已经淡忘,开始做课程设计的时候有些困难 在指导老师的帮助下,终于完成了所有的题目。虽然有困难,但在这次课程设计的过程中,体会 到了 c语言的精华。学习到了许多c语言的知识。如果没有老师悉心的指导,是很难完成任务的。 所以在这里我要感谢我们的指导老师,马老师。谢谢您在我们遇到困难时帮我及时解决了问题, 您的指导与帮助让我受益非浅。四、参考文献1 汤小丹. 西安:西安大学科技大学出版.2007

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号