操作系统实习报告(源代码)
- 格式:doc
- 大小:108.50 KB
- 文档页数:18
一、前绪可编程控制器PLC是一种在传统继电器控制系统的基础上,综合了计算机技术、自动控制技术和通信技术而发展起来的新型工业控制装置,具有编程容易、体积小、使用灵活方便、抗干扰能力强、可靠性高等一系列有点,是专门为工业控制应用而设计的一种通用控制器。
学习和应用好PLC控制是以后步入社会工作的基础,是进一步增强自身能力的需要。
二、实习目的1、掌握可编程序控制器的操作方法。
2、熟悉基本指令与应用指令以及实习设备的使用方法。
3、掌握变频器主要参数设置。
4、掌握PC机、PLC和变频器之间的通信技术。
5、掌握WinCC组态软件的使用。
6、理论联系实际提高学生分析问题和解决问题的能力。
三、实习要求及任务1、将变频器和PLC通过导线进行连接。
通过变频器的控制面板进行参数设置。
根据I/O的定义,编写PLC程序,实现通过操作面板控制交流异步电动机起动,停止,正反转切换,并监视电动机的故障和运行状态。
2、做WinCC画面,将WinCC与PLC相连,实现在WinCC上对变频器的监控。
除了控制电动机起动,停止,正反转切换,监视电动机的故障和运行状态外,还要在WinCC画面上进行频率给定以及对实际频率的监视。
四、实习方法1、通信方式有两种:(1)通过MPI通信实现。
(2)通过Profibus-DP实现。
2、控制方式有两种:(1)本地的操作面板控制。
(2)远程的WinCC画面监控。
五、实习内容的相关原理性知识1、通信技术1)变频器的通信方式(1)通过PMU操作面板通信。
即通过操作面板对变频器和电动机进行参数设置。
(2)通过端子通信。
即通过数字量或模拟量输入/输出端子进行通信。
(3)通过USS串口通信。
PMU面板下面有串口,通过RS232或RS485串口线连接电脑的串口实现通信。
(4)借助于CBP2通信板,通过Profibus-DP通信。
通过Profibus-DP总线连接PLC,PC和变频器。
通信板如图2-1所示。
通讯板上的三个LED指示灯(绿、黄、红),用于显示变频器当前运行状态。
java实习报告java实习的开展能使实习生们在编程的理论知识上有所巩固和深化,有实操的经验。
以下是小编为大家精心整理的java 实习报告,欢迎大家阅读。
1、传统的错误观念以前以为教学视频和代码看多,自己就懂的多,实际做起来,却不知从何下手,问题在那?如何定位?如何解决?通通跟一样能力有关,debug追踪能力,也称调试.在项目组工作不愁源码资源,但问题是蛋糕摆在面前,你如何去消化?有位同事告诉我:代码看几遍都没用,要去抄,例如一个查询模块,在此基础上去做具体记录的历史记录查询模块,你可能会觉得很简单,但实际情况却往往报一堆异常,配置问题涉及到方方面面,以及数据库字段,传值问题等等,一大堆对于新人来说很郁闷的问题.但不用怕,只要学会调试,一个个问题去追踪,一个个去解决,自然而然,那段“源码”才真正属于你.2、如何调试追踪?如果你能在短短的时间内就看到问题点在那,放下断点去追踪,出去找工作,绝对没问题.出现问题的时候,不要光看代码,要用实际行动去追踪运行期间的具体值,那是最好途径.eclipse是个很爽的idea,这点做的很好.例如页面内容显示不是自己想要的数据,我们要先从数据库查询语句去下手,设置断点,一步一步step over,让sql字段(存取最终sql语句的字符串)运行到有值,inspect进去看,如果还看不出来,就点击它,copy后在sql客户端去实际运行,看看实际查询出来的表是什么,如果是对的,有可能就是页面调用的错误或者action逻辑的传值问题.页面错误的调试,基本方法是用右键点击实际网页查看源代码,copy到editplus,就能看到具体错误发生在那几行.通常有几种常见的错误,.例如.缺少对象这种很多时候是有些被你调用的字段有可能为空的情况出现的,可以加if(xxx=null)语句加保护.追踪的方法基本就是用alert语句,放在有可能出错的地方.毕业实习总结3、一些习惯遇到问题先自己思考,无从下手再找高手帮忙看看,注意他帮你看的思路,别在一旁闲着,看多了自己也会了,不然你一辈子都停留在那种水平,从人身上学到的东西远远比书多的多.解决了一个问题后,要去究根问底去找到问题产生的起因,以防你下次遇到类似的问题再浪费同样的时间.把代码写的漂亮,注释,空行,规范一样不能少,可读性是放在第一位.曾经看过一个高手写的代码,真的一看就是不同水平的人写的,几乎很完美,读起来很流畅,方便自己也方便别人.任务完后不要呆着,去要求经理给你更有挑战性的任务,只要你肯去尝试,他们就会对你另言相看,把三天的任务一天加班搞定,效率和忠诚都有了,路也比较好走了.4、题尾话如果你有一份思想,我有一份思想,拿出来交换,我们大家拥有就是2分份思想,可惜这种观念,并不能深入每一个团队的每一个人,少一点自私,未必不是好事.职场到处都存在被排挤的隐患,要为自己找片草地实在不容易.但有一点要相信,只要自。
计算机操作系统实训报告范文英文版Computer Operating System Practical Training Report SampleIntroductionIn this report, I will discuss the practical training I underwent in the computer operating system course. The training involved hands-on experience with various operating systems, including Windows, Linux, and MacOS. I will provide an overview of the tasks I completed during the training, as well as the skills I acquired.Tasks CompletedDuring the practical training, I completed a series of tasks aimed at familiarizing myself with the different operating systems. These tasks included installing and configuring the operating systems, managing user accounts, setting up network connections, and troubleshooting common issues. I also learned how to use command line interfaces and perform system maintenance tasks.Skills AcquiredThrough the practical training, I acquired a range of skills that will be valuable in my future career as a computer scientist. I learned how to navigate and customize different operating systems, troubleshoot software and hardware issues, and optimize system performance. I also gained experience working with virtual machines and remote access tools, which will be useful in a variety of professional settings.ConclusionOverall, the practical training in the computer operating system course was a valuable learning experience. I gained a deeper understanding of how operating systems work and developed practical skills that will benefit me in my future career. I lookforward to applying what I have learned in future projects and continuing to expand my knowledge in this field.英文版计算机操作系统实训报告范文介绍在这份报告中,我将讨论我在计算机操作系统课程中接受的实训。
计算机专业毕业实习报告范文4篇计算机专业毕业实习报告篇1尊敬的老师:您好!初踏社会,心情激动、紧张。
激动的是我终于可以长大了,可以开始我真正的人生;紧张的是不知自己是否能适应这个社会,战胜这新环境。
我最先到______公司做了一个多月的计算机硬件工作,刚来公司的时候老板就和我聊了很多,问我网络方面会不会,组装和维护计算机有过吗?我当时真是出了一把冷汗,不过还好平日在学校都有这方面的动手,自己的电脑被我也折腾过一段时间,还是游刃有余的回答了经理的问题.记得实习开始的那一天,我是在无聊中度过的,整日无所事事,几乎在办公桌前坐了一天,空闲得让我要打瞌睡了,真希望可以有人叫我帮忙做点事情啊!过了几天后,才开始做事,可是每天就是单纯的组装和维护计算机,我当然全力以赴,尽心尽力做到最好。
现在想想其实这就是我的工作。
后来回武汉在电脑城做了一段时间,工作总结觉得没有学到什么东西,于是便回家开了一个电脑维修店,这时,有个朋友要搞个网吧,叫我帮忙,当时想没关系的,我有信心,怎么说也跟计算机相关,不懂就多动手多请教应该很快领悟过来的!劳动节第一天我就开始动手实干了。
布线、接水晶头、装机、搞网络和调试;其实除了我,还有一个比较有经验的师傅和我一起做的,我一边做还可以一边学,他也会在一边指导,很快我对一些一直没接触过的事物了解过来!就这么一搞假期一下子就过去了,每天都是早上忙到晚上,很累,从未那么累!当网吧搞好后,那个师傅也走了,以后的事情都要我一个人去解决了,处理网吧的电脑,打印机的故障,不知道是否能够顺利解决,而当真正将故障排除后,心里头有种说不出的高兴,我知道我的能力十分有限,但我始终没怕过,让我自己去摸索自己去解决,就算遇到实在不行的话,我会求助同学和朋友,给我做技术支持。
我不怕问题的到来,因为问题总是可以得到解决的!心得体会通过这样我学习了许多,成长了不少。
这个五月的确很累,每天拖着疲惫的身子回家,但是后面也渐渐就习惯了。
大学生计算机实训报告2000字(精彩5篇)计算机实习报告篇一我是某某某计算机职业技术学院06级网络系的学生,我在20某某年7月份毕业以后来到了北京某某某商务网站进行实习工作,我主要做的是网页设计,在办公室有很多同事都和我一样是刚刚从学校里走出来的应届毕业生,我们都为了同一个理想来到了这里,那就是通过实践工作来强化自己的技术,使自己能为这个国家、这个社会做出一份属于自己的贡献。
现将我在实习期间的工作情况汇报如下。
一、实习工作介绍我所在的这家公司,是一家做网上招商的商业网站,公司接收各种厂家提供的信息,然后由网络的技术人员,将商家的信息做成网页广告,然后挂在我们的网站上,以此达到商业推广的目的,类似我们公司的网站在同行业还有u88、28招商网等。
我和其它几位同事做为网络部的技术人员,主要的工作就是接收美工人员的网站模板,将其通过photoshop切片,然后导入dreamweaver进行排版,(排版主要使用css+div),并进一步的加以制作,完善美化,如加入js代码,或透明flash,因为网页是用css+div进行排版的,所以在最后一步的时候,我们还需要进行浏览器测试,因为css+div排版方式有一个最大的缺点就是:浏览器不兼容的问题,典型的如:ie与fireworks,因为各种浏览器使用的协议不同,所以会导致页面在最终浏览的时候有一些小问题,如:页面混乱,图片、文字之间的距离过大或过小,页面不美观等等,做为一个新人,我在有些方面的技术还很不成熟,所以在技术总监张伟的帮助下,解决了很多问题,所在我很感谢他,当每天我们做完网页后,都会在代码页面加入注释代码,在里面写上每个人姓名的汉语拼间和工作日期,这样方便月底做统计工作,公司领导会根据每个人的工作数量进行奖励,每做一个页面会有2块的提成,虽然少点,但是积少成多,也是很可观的。
二、初来公司的时候(一)初级考试(二)三天的培训工作三天后,我来到了公司,一看,来参加培训的人有很多,大概在十多个人左右,其实所谓的培训,就是让大家先熟悉这家网站的工作,先做一些他们平时干的活,做一些广告网页,这些网页都是静态的,没什么难度。
关于计算机实验报告的参考范文(3篇)关于计算机实验报告的参考范文(精选3篇)关于计算机实验报告的参考范文篇1一、实验题目文件和文件夹的管理二、实验目的1.熟悉Windows_P的文件系统。
2.掌握资源管理器的使用方法。
3.熟练掌握在WindoWs_P资源管理器下,对文件(夹)的选择、新建、移动、复制、删除、重命名的操作方法。
三、实验内容1.启动资源管理器并利用资源管理器浏览文件。
2.在D盘创建文件夹3.在所创建文件夹中创建Word文件。
4.对所创建文件或文件夹执行复制、移动、重命名、删除、恢复、创建快捷方式及设置共享等操作。
四、实验步骤(一)文件与文件夹管理1展开与折叠文件夹。
右击开始,打开资源管理器,在左窗格中点击“+”展开,点击“一”折叠2.改变文件显示方式。
打开资源管理器/查看,选择缩略、列表,排列图标等3.建立树状目录。
在D盘空白处右击,选择新建/文件夹,输入经济贸易学院,依次在新建文件夹中建立经济类11031.1.建WOrd并保存。
打开开始/程序/word,输入内容。
选择文件/另存为,查找D盘/经济贸易学院/1103班/王帅,单击保存5.复制、移动文件夹6.重命名、删除、恢复。
右击文件夹,选择重命名,输入新名字;选择删除,删除文件7.创建文件的快捷方式。
右击王帅文件夹,选择发送到/桌面快捷方式8.设置共享文件。
右击王帅,选择属性/共享/在网络上共享这个文件/确定9.显示扩展名。
打开资源管理器/工具/文件夹选项/查看/高级设置,撤销隐藏已知文件的扩展名(二)控制面板的设置。
1设置显示属性。
右击打开显示属性/桌面、屏幕保护程序10设置鼠标。
打开控制面板/鼠标/按钮(调整滑块,感受速度)、指针11设置键盘。
打开控制面板/键盘/速度(调整滑块,感受速度)、硬件12设置日期和时间打开控制面板/日期和时间13设置输入法。
打开控制面板/区域与语言选项/详细信息/文字服务与输入语言(三)WindOWS附件的使用1.计算器。
计算机系统实训报告1.引言计算机系统实训是计算机科学与技术专业学生在培养计算机系统方面的能力和技术实践的一种重要实践方式。
通过实践,学生能够深入了解计算机系统的工作原理和相关技术,掌握实际操作和解决问题的能力,提高自己的实际能力和创新能力。
2.实践目标本次计算机系统实训的主要目标是让学生掌握操作系统安装与配置、网络配置与管理、系统调优与性能分析等方面的基本知识和技能。
通过实际操作和实验,提高学生对计算机系统的理解和操作能力,为将来的工作和学习打下良好的基础。
3.实验内容(1)操作系统安装与配置:学生需要选择合适的操作系统,按照实验指导书的要求进行安装和配置,包括分区、文件系统、启动配置等。
(2)网络配置与管理:学生需要学习和掌握网络配置和管理的基本知识,包括IP地址设置、网络连接、网络共享等。
(3)系统调优与性能分析:学生需要学习和掌握系统调优和性能分析的基本知识和方法,实际操作并进行性能测试和分析。
4.实践过程(1)操作系统安装与配置:根据实验指导书的要求,选择合适的操作系统进行安装和配置。
按照要求进行分区,设置文件系统,并进行启动配置。
(2)网络配置与管理:学习和掌握网络配置和管理的基本知识,并按照实验指导书的要求进行实践操作。
设置IP地址,连接网络,并进行网络共享。
(3)系统调优与性能分析:学习和掌握系统调优和性能分析的基本知识和方法,并按照实验指导书的要求进行实践操作。
进行系统性能测试和分析,根据结果进行调优。
5.实验结果与分析通过实践操作和实验测试,学生顺利完成了实验任务,并取得了良好的实验效果。
通过实验结果和分析,学生对计算机系统的工作原理和相关技术有了更深入的了解,提高了自己的操作能力和解决问题的能力。
6.总结与展望通过本次计算机系统实训,学生不仅掌握了操作系统安装与配置、网络配置与管理、系统调优与性能分析等方面的基本知识和技能,还提高了自己的实际操作和解决问题的能力。
通过实践,学生对计算机系统有了更全面和深入的认识,为将来的工作和学习打下了坚实的基础。
计算机实习报告怎么写(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如演讲致辞、总结报告、心得体会、合同协议、条据文书、策划方案、导游词、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, our store provides various types of classic sample essays for everyone, such as speeches, summary reports, insights, contract agreements, documentary evidence, planning plans, tour guides, teaching materials, complete essays, and other sample essays. If you want to learn about different formats and writing methods of sample essays, please stay tuned!计算机实习报告怎么写计算机实习报告怎么写(5篇)实习报告鼓励实习生对自己在实习中的表现和成长进行反思和自我评估。
操作系统安装与配置实验报告实验目的:
1. 了解操作系统的安装过程。
2. 熟悉操作系统的基本配置。
实验内容:
1. 安装操作系统。
2. 进行基本配置。
3. 测试系统运行情况。
实验步骤:
1. 准备安装光盘或USB启动盘。
2. 将光盘或USB启动盘插入计算机,并启动计算机。
3. 按照提示选择安装语言和时区等信息。
4. 选择安装类型(新安装或升级)。
5. 选择安装目标磁盘。
6. 进行分区和格式化。
7. 完成安装并进行基本配置(设置用户名、密码、网络等)。
实验结果:
1. 成功安装操作系统。
2. 完成基本配置。
3. 系统能够正常运行。
实验总结:
通过本次实验,我了解了操作系统的安装过程和基本配置方法。
在实际操作中,我遇到了一些问题,比如分区和格式化时出现了错误提示,但通过查阅资料和询问同学,最终成功解决了这些问题。
通过这次实验,我对操作系统的安装和配置有了更深入的了解,也提高了自己的解决问题的能力。
希望在以后的实验中能够继续学习和提高。
线程机制实习报告目录内容一:总体概述 (3)内容二:任务完成情况 (3)任务完成列表(Y/N) (3)具体Exercise的完成情况 (3)内容三:遇到的困难以及解决方法 (7)内容四:收获及感想 (7)内容五:对课程的意见和建议 (7)内容六:参考文献 (8)内容一:总体概述本次lab主要是对线程机制的学习和理解。
首先,进程控制块(PCB)是进程存在的标志,系统利用PCB来控制和管理进程,所以PCB是系统感知进程存在的唯一标志。
用它来记录进程的外部特征,描述进程的运动变化过程。
Exercise1通过对不同系统的进程控制块的调研学习进程控制块在不同系统中的实现方式。
内容二:任务完成情况任务完成列表(Y/N)Exercise1 Exercise2 Exercise3 Exercise4完成情况Y Y Y Y具体Exercise的完成情况Exercise1调研调研Linux或Windows中进程控制块(PCB)的基本实现方式,理解与Nachos的异同。
解答:Linux的进程控制块为一个由结构task_struct所定义的数据结构,task_struct存放在/include/linux/sched.h中,其中包括管理进程所需的各种信息。
Linux系统的所有进程控制块组织成结构数组形式。
早期的Linux版本是多可同时运行进程的个数由NR_TASK(缺省值为512)规定,NR_TASK即为PCB结果数组的长度。
近期版本中的PCB组成一个环形结构,系统中实际存在的进程数由其定义的全局变量nr_task来动态记录。
结构数组:struct task_struct *task[NR_TASK]={&init_task}来记录指向各PCB的指针,该指针数组定义于/kernel/sched.c中。
在创建一个新进程时,系统在内存中申请一个空的task_struct区,即空闲PCB块,并填入所需信息。
同时将指向该结构的指针填入到task[]数组中。
#define false 0#define true 1#include "stdio.h"typedef struct{char name[3]; /*文件或目录名*/char type[2]; /*文件类型名*/char attribute; /*属性*/char address; /*文件或目录的起始盘块号*/char length; /*文件长度,以盘块为单位*/}content; /*目录结构*/#define n 5 /*模拟实验中系统允许打开文件的最大数量*/typedef struct{int dnum; /*磁盘盘块号*/int bnum; /*盘块内第几项*/}pointer; /*已打开文件表中读写指针的结构*/typedef struct{char name[20]; /*文件绝对路径名*/char attribute;/*文件的属性,用1个字节表示,所以用了char类型*/int number; /*文件起始盘块号*/int length; /*文件长度,文件占用的字节数*/int flag; /*操作类型,用"0"表示以读操作方式开文件,用"1"表示写操作方式打开文件*/ pointer read; /*读文件的位置,文件刚打开时dnum为文件起始盘块号,bnum为"0"*/ pointer write; /*写文件的位置,文件建立时dnum为文件起始盘块号,bnum为"0",打开时为文件末尾*/}OFILE; /*已打开文件表项类型定义*/struct{OFILE file[n]; /*已打开文件表*/int length; /*已打开文件表中登记的文件数量*/}openfile; /*已打开文件表定义*/char buffer1[64];/*模拟缓冲1*/content buffer2[8];/*模拟缓冲2*/FILE *fc; /*模拟磁盘的文件指针*/void copen(OFILE *x1,OFILE *x2)OFILE *x1,*x2;{strcpy(x1->name,x2->name);x1->attribute=x2->attribute;x1->number=x2->number;x1->length=x2->length;x1->flag=x2->flag;x1->read.dnum=x2->read.dnum;x1->read.bnum=x2->read.bnum;x1->write.dnum=x2->write.dnum;x1->write.bnum=x2->write.bnum;}sopen(name)/*在已打开文件表中查找文件name*/char *name;{int i;i=0;while(i<openfile.length&&strcmp(openfile.file[i].name,name)!=0)/*依次查找已打开文件表*/i++;if(i>=openfile.length)return(-1);return(i);}/*查找sopen函数结束*/dopen(name)/*在已打开文件表中删除文件name*/char *name;{int i;i=sopen(name);if(i==-1)printf("文件未打开/n");else{copen(&openfile.file[i],&openfile.file[openfile.length-1]);openfile.length--;}}/*删除函数结束*/iopen(x)/*在已打开文件表中插入文件name*/content *x;{int i;i=sopen(x->name);if(i!=-1){printf("文件已经打开/n");return(false);}else if(openfile.length==n){printf("已打开文件表已满/n");return(false);}else{copen(&openfile.file[openfile.length],x);openfile.length++;return(true);}}/*填写已打开文件表函数结束*/allocate( )/*分配一个磁盘块,返回块号*/{int i;fseek(fc,0,SEEK_SET); /*将模拟磁盘的文件指针移至模拟磁盘FAT表*/fread(buffer1,64L,1,fc);/*将FAT表中第一个磁盘块读入模拟缓冲buffer1中*/for(i=3;i<63;i++)if(buffer1[i]==0){ /*FAT中的第i项为0,分配第i块磁盘块,修改FAT表,并且写回磁盘*/buffer1[i]=255;fseek(fc,0,SEEK_SET);fwrite (buffer1,64L,1,fc);return(i); /*返回磁盘号*/}fread(buffer1,64L,1,fc);/*将FAT表中第二个磁盘块读入模拟缓冲buffer1中*/for(i=0;i<63;i++)if(buffer1[i]==0){/*FAT中的第i项为0,分配第i+64块磁盘块,修改FAT表,并且写回磁盘*/ buffer1[i]=255;fseek(fc,-64L,SEEK_CUR);fwrite(buffer1,64L,1,fc);return(i+64); /*返回磁盘号*/}printf("已经没有磁盘空间/n");return(false);}/*分配磁盘块函数结束*/read_file(name,length)/*读文件函数,文件路径名name,读取长度length*/char *name;int length;{int i,t;char ch;if((i=sopen(name))==-1){printf("文件没有打开或不存在/n");return(false);}if(openfile.file[i].flag==1){printf("文件以写方式打开,不能读/n");return(false);}t=0;fseek(fc,openfile.file[i].read.dnum*64L,SEEK_SET);fread(buffer1,64,1,fc);while(t<length&&buffer1[openfile.file[i].read.bnum]!='#'){putchar(buffer1[openfile.file[i].read.bnum]);/*读出一个字符(这里是在屏幕上显示)*/if((t+1)%64==0)putchar('/n');/*修改读指针*/openfile.file[i].read.bnum++;if(openfile.file[i].read.bnum>=64)/*一块读完,读取下一个盘块*/{fseek(fc,openfile.file[i].read.dnum/64*64, SEEK_SET);fread(buffer1,64,1,fc);openfile.file[i].read.dnum=buffer1[openfile.file[i].read.dnum%64];/*修改读指针*/openfile.file[i].read.bnum=0;fseek(fc,openfile.file[i].read.dnum*64L,SEEK_SET);fread(buffer1,64,1,fc);/*读取下一个*/}t++;}}/*读函数结束*/write_file(name,buff,length)/*写文件函数*/char *name;/*文件路径名*/char *buff;/*存放准备写入磁盘的内容*/int length;/*写入内容的长度*/{int i,t,dd;if((i=sopen(name))==-1)/*文件不存在,无法写*/{printf("文件没有打开或不存在/n");return(false);}if(openfile.file[i].flag==0){printf("文件以读方式打开,不能写/n");return(false);}t=0;fseek(fc,openfile.file[i].write.dnum*64L, SEEK_SET);fread(buffer1,64,1,fc);while(t<length){buffer1[openfile.file[i].write.bnum]=buff[t];openfile.file[i].write.bnum++;openfile.file[i].length++;if(openfile.file[i].write.bnum>=64){fseek(fc, openfile.file[i].write.dnum*64L, SEEK_SET);fwrite(buffer1,64,1,fc);/*一块写完,写回磁盘*/if((dd=allocate())==false){openfile.file[i].write.bnum--;openfile.file[i].length--;printf("无磁盘空间,部分信息丢失,写失败/n");return(false);}/*if*/fseek(fc,openfile.file[i].write.dnum/64*64L, SEEK_SET);fread(buffer1,64,1,fc);buffer1[openfile.file[i].write.dnum%64]=dd;fseek(fc,openfile.file[i].write.dnum/64*64L, SEEK_SET);fwrite(buffer1,64,1,fc);openfile.file[i].write.dnum=dd;openfile.file[i].write.bnum=0;}/*if*/t++;}/*while*/fseek(fc, openfile.file[i].write.dnum*64L, SEEK_SET);fwrite(buffer1,64,1,fc);/*一块写完,写回磁盘*/}/*写函数结束*/search(name,flag,dnum,bnum)/*查找路径名为name的文件或目录,返回该目录的起始盘块号*/char *name;int flag; /*flag=8表示查找目录,否则为文件*/int *dnum,*bnum;/*返回找到文件或目录的目录项的位置:盘块dnum中第bnum项*/ {int k,i,s,t,j,last=0;char pna[3],type[2];if((strcmp(name,"")==0)||(strcmp(name,"/")==0))/*根目录*/return(2);k=0;if(name[0]=='/')k=1;i=2; /*i=根目录的起始盘块号*/while(last!=1){/*pna=从name中分离出"/"后一个目录名(或文件名)*/for(s=0;name[k]!='.'&&name[k]!='/'&&s<3&&name[k]!='/0';s++,k++)pna[s]=name[k];for(;s<3;s++)/*用空格补全名字长度*/pna[s]=' ';while(name[k]!='.'&&name[k]!='/0'&&name[k]!='/')/*除去多余字符*/k++;type[0]=type[1]=' ';if(name[k]=='.')/*取文件类型名type*/if(flag==8){printf("目录不应该有有类型名,查找失败/n");return(false);}else{/*文件遇到类型名认为结束,后面的字符作废*/k++;if(name[k]!='/0')type[0]=name[k];k++;if(name[k]!='/0')type[1]=name[k];if(name[k]!='/0'&&name[k+1]!='/0'){printf("文件名错误/n");return(false);}last=1;}elseif(name[k]!='/0')k++;if(name[k]=='/0')last=1;/*查找目录且名字等于pna的目录项*/fseek(fc,i*64L,SEEK_SET);fread(buffer2,64L,1,fc);j=0;if(last==1&&flag!=8)while(j<8&&!(buffer2[j].attribute!=8&&buffer2[j].name[0]==pna[0]&&buffer2[j].name[1]==pna[1]&&buffer2[j].name[2]==pna[2]&&buffer2[j].type[0]==type[0]&&buffer2[j].type[1]==type[1]))j++;elsewhile(j<8&&!(buffer2[j].attribute==8&&buffer2[j].name[0]==pna[0]&&buffer2[j].name[1]= =pna[1]&&buffer2[j].name[2]==pna[2]))j++;if(j<8)/*找到该目录或文件*/if(last==1)/*查找结束*/{*dnum=i;*bnum=j;return(buffer2[j].address);}else/*查找还未结束*/i=buffer2[j].address;/*读取下一个盘块*/elsereturn(false);}/*while 查找结束*/}/*search()结束*/create_file(name,attribute)/*建立文件函数,路径名name,文件属性attribute*/char *name;int attribute;{int dnum,bnum,i,j,last,k,s,d,t,tt,b,dd,flag,dn,bn;char dname[3],tname[2],pathname[20];OFILE x;if(attribute%2==1){printf("只读文件,无法写,不能建立/n");return(false);}if(openfile.length==n){printf("已打开表已满,不能建立/n");return(false);}/* 将name分成两部分,目录路径pathname和目录名dname*/for(j=0;name[j]!='/0';j++)/*查找最后一个"/"*/if(name[j]=='/')s=j;/*分离目录路径*/for(j=0;j<s;j++)pathname[j]=name[j];pathname[j]='/0';/*分离文件名*/for(k=0,j=s+1;name[j]!='/0'&&k<3&&name[j]!='.';j++,k++)dname[k]=name[j];if(k==0){printf("错误文件名或目录名/n");return(false);}for(;k<3;k++)dname[k]=' ';k=0;if(name[j++]=='.')/*分离类型名*/{for(;name[j]!='/0'&&k<2&&name[j]!='.';j++,k++)tname[k]=name[j];}for(;k<2;k++)tname[k]=' ';if((d=search(pathname,8,&dn,&bn))==false)/*找到目录路径,返回该目录所在块号dn 和项数bn*/{printf("目录不存在,不能建立");return(false);}/*确认该目录不存在的同时查找空目录项*/b=-1;fseek(fc,d*64L,SEEK_SET);fread(buffer2,64L,1,fc); /*读出dnum盘块的内容*/for(t=0;t<8;t++){if(buffer2[t].name[0]==dname[0]&&buffer2[t].name[1]==dname[1]&&buffer2[t].name[2]== dname[2]&&buffer2[t].type[0]==tname[0]&&buffer2[t].type[1]==tname[1]){/*找到名字dname的文件,建立失败*/printf("文件已经存在,不能建立/n");return(false);}if(buffer2[t].name[0]=='$'&&b==-1)b=t;}/*for*/if(b==-1)/*没有空目录项,建立失败*/{printf("目录无空间/n");return(false);}if((dd=allocate( ))==false)/*分配给建立目录的磁盘盘块dd*/{printf("建立文件失败/n");return(false);}/*填写目录项*/for(i=0;i<3;i++)buffer2[b].name[i]=dname[i];for(i=0;i<2;i++)buffer2[b].type[i]=tname[i];buffer2[b].attribute=attribute;buffer2[b].address=dd;buffer2[b].length=0;fseek(fc,d*64L,SEEK_SET);fwrite(buffer2,64L,1,fc);/*填写已打开文件表*/strcpy(,name);x.attribute=attribute;x.number=dd;x.length=0;x.flag=1;x.read.dnum=x.write.dnum=dd;x.read.bnum=x.write.bnum=0;iopen(&x);}/*建立文件结束*/open_file(name,attribute)/*打开文件函数*/char *name;int attribute;{OFILE x;int dnum,bnum,last,i,d;if((d=search(name,4,&dnum,&bnum))==false){printf("文件不存在,打开操作失败/n");return(false);}fseek(fc,dnum*64L,SEEK_SET);/*读出对应目录项*/fread(buffer2,64,1,fc);if((buffer2[bnum].attribute%2==1)&& attribute==1)/*对只读文件要求写*/ {printf("文件不能写,打开失败");return(false);}strcpy(,name);x.attribute=buffer2[bnum].attribute;x.number=buffer2[bnum].address;x.read.dnum=x.write.dnum=buffer2[bnum].address;x.read.bnum=x.write.bnum=0;x.flag=attribute;if(attribute==1){while(d!='/xff')/*寻找文件末尾*/{fseek(fc, d/64*64L, SEEK_SET);fread(buffer1,64L,1,fc);/*读出dnum项所在FAT*/last=d;d=buffer1[d%64];/*读出dnum块下一块内容赋给dnum*/ }/*while*/x.write.dnum=last;/*填写写指针*/fseek(fc, last*64L, SEEK_SET);fread(buffer1,64L,1,fc);for(i=0;i<64&&buffer1[i]!='#';i++);x.write.bnum=i;x.length=(buffer2[bnum].length-1)*64+i;}iopen(&x);/*填写已打开文件表*/}close_file(name)/*关闭文件函数*/char *name;{int i,dnum,bnum;if((i=sopen(name))==-1){printf("打开的文件中没有该文件,关闭失败/n");return(false);}if(openfile.file[i].flag==1)/*写文件的追加文件结束符*/{fseek(fc,openfile.file[i].write.dnum*64L, SEEK_SET);fread(buffer1,64,1,fc);buffer1[openfile.file[i].write.bnum]='#';fseek(fc,openfile.file[i].write.dnum*64L, SEEK_SET);fwrite(buffer1,64,1,fc);fputc('#',fc);search(name,4,&dnum,&bnum);/*查找该文件目录位置*//*修改目录中的文件长度*/fseek(fc,dnum*64L, SEEK_SET);fread(buffer2,64,1,fc);buffer2[bnum].length=openfile.file[i].length/64+1;fseek(fc, dnum*64L, SEEK_SET);fwrite(buffer2,64,1,fc);}/*在已打开文件表中删除该文件的登记项*/if(openfile.length>1)copen(&openfile.file[i],&openfile.file[openfile.length-1]);openfile.length--;}delete(name)/*删除文件*/char *name;{int dnum,bnum,t;if((t=search(name,4,&dnum,&bnum))==false){printf("文件不存在/n");return(false);}if(sopen(name)!=-1){printf("该文件打开,不能删除/n");return(false);}fseek(fc,dnum*64L, SEEK_SET);fread(buffer2,64,1,fc);buffer2[bnum].name[0]='$';/*将该文件的目录置成空目录*/fseek(fc,dnum*64L, SEEK_SET);fwrite(buffer2,64,1,fc);while(t!='/xff')/*通过FAT查找每一个盘块号,并依次删除*/{dnum=t;fseek(fc, dnum/64*64, SEEK_SET);fread(buffer1,64,1,fc);t=buffer1[dnum%64];buffer1[dnum%64]=0;fseek(fc, dnum/64*64L, SEEK_SET);fwrite(buffer1,64,1,fc);}}/*文件删除结束*/md(name)/*建立目录函数,目录路径名name*/char *name;{int dnum,bnum,i,j,last,k,s,d,t,tt,b,dd,flag,dn,bn;char dname[3],pathname[20];i=2;/* i=根目录的起始盘块号*//* 将name分成两部分,目录路径pathname和目录名dname*/ for(j=0;name[j]!='/0';j++)/*查找最后一个"/"*/if(name[j]=='/')s=j;/*分离目录路径*/for(j=0;j<s;j++)pathname[j]=name[j];pathname[j]='/0';/*分离目录名*/for(k=0,j=s+1;name[j]!='/0'&&k<3&&name[j]!='.';j++,k++) dname[k]=name[j];if(k==0){printf("错误文件名或目录名/n");return(false);}for(;k<3;k++)dname[k]=' ';if((d=search(pathname,8,&dn,&bn))==false)/*找到目录路径*/{printf("目录不存在,不能建立/n");return(false);}b=-1;/*确认该目录不存在的同时查找空目录项*/fseek(fc,d*64L,SEEK_SET);fread(buffer2,64L,1,fc);/*读出d盘块的内容*/for(t=0;t<8;t++){if(buffer2[t].name[0]==dname[0]&&buffer2[t].name[1]==dname[1] &&buffer2[t].name[2]==dname[2]&&buffer2[t].attribute==8) {/*找到名字dname的目录,建立失败*/printf("目录已经存在,不能建立/n");return(false);}if(buffer2[t].name[0]=='$'&&b==-1)b=t;}/*for*/if(b==-1)/*没有空目录项,不能建立*/{printf("目录无空间/n");return(false);}if((dd=allocate( ))==false)/*分配给建立目录的磁盘盘块dd*/{printf("目录不能建立/n");return(false);}/*填写目录项*/for(i=0;i<3;i++)buffer2[b].name[i]=dname[i];buffer2[b].type[0]=buffer2[b].type[1]=' ';buffer2[b].attribute=8;buffer2[b].address=dd;buffer2[b].length=0;fseek(fc,d*64L,SEEK_SET);fwrite(buffer2,64L,1,fc);/*分给新建目录的盘块初始化*/for(t=0;t<8;t++)buffer2[t].name[0]='$';fseek(fc, dd*64L, SEEK_SET);fwrite(buffer2,64L,1,fc);}/*建立目录结束*/dir(name)/*显示目录内容*/char *name;{int i,bnum,t,tt,dnum,dn,bn;if((dnum=search(name,8,&dn,&bn))==false)/*找到目录路径,返回该目录所在块号dn和盘块内项数bn*/{printf("目录不存在/n");return(false);}printf("名称扩展名起始盘块长度/n");/*显示目录内容*/fseek(fc,dnum*64L, SEEK_SET);fread(buffer2,64L,1,fc);for(t=0;t<8;t++)/*显示该盘块中目录项的内容*/if(buffer2[t].name[0]!='$')printf(" %c%c%c %c%c %4d%7d/n", buffer2[t].name[0], buffer2[t].name[1],buffer2[t].name[2], buffer2[t].type[0], buffer2[t].type[1],buffer2[t].address, buffer2[t].length);}/*显示目录函数结束*/typefile(name)/*显示文件内容*/char *name;{int i,dnum,dn,bn,t;if((dnum=search(name,1,&dn,&bn))==false){printf("文件不存在/n");return(false);}if(sopen(name)!=-1){printf("该文件打开,不能显示/n");return(false);}while(dnum!='/xff'){fseek(fc,dnum*64L,SEEK_SET);fread(buffer1,64,1,fc);/*读一个盘块到缓冲*/for(t=0;t<64&&buffer1[t]!='#';t++)/*显示缓冲中内容*/ putchar(buffer1[t]);printf("/n");/*获得下一个盘块*/fseek(fc, dnum/64*64L, SEEK_SET);fread(buffer1,64,1,fc);dnum=buffer1[dnum%64];}}/*显示文件函数结束*/change(name,attribute)/*改变文件name的属性为attribute*/char *name;int attribute;{int dnum,bnum;if(search(name,1,&dnum,&bnum)==false)/*查找文件目录*/ {printf("文件不存在/n");return(false);}if(sopen(name)!=-1){printf("该文件打开,不能改变文件属性/n");return(false);}fseek(fc,dnum*64L,SEEK_SET);fread(buffer2,64,1,fc);/*读出该目录所在盘块*/buffer2[bnum].attribute=attribute;/*修改属性*/fseek(fc,dnum*64L,SEEK_SET);fwrite(buffer2,64,1,fc);/*写回磁盘*/}/*改变文件属性函数结束*/main( ){char name[20];int attribute,type,length,i,a,j;char buffer[64];/*建立文件,模拟磁盘*/if((fc=fopen("c://os//c","w+"))==NULL){printf("无法打开文件/n");exit(0);}/*初始化已打开文件表*/openfile.length=0;/*初始化磁盘*//*初始化文件分配表*/buffer1[0]=buffer1[1]=buffer1[2]=255;/*磁盘第0、1块存放FAT表,第2块存放跟目录*/for(i=3;i<64;i++)buffer1[i]=0;buffer1[13]=buffer1[49]=254;/*假定模拟磁盘中有两个坏盘块:第13块和49块*/fwrite(buffer1,64L,1,fc);for(i=0;i<64;i++)buffer1[i]=0;fwrite(buffer1,64L,1,fc);/*初始化根目录*/for(i=0;i<8;i++)buffer2[i].name[0]='$';/*若目录项的第一个字符为"$"表示该目录项为空*/ fwrite(buffer2,64L,1,fc);/*初始化已打开文件表*/while(1){printf("/n 0 - 结束/n");printf(" 1 - 建立文件/n");printf(" 2 - 打开文件/n");printf(" 3 - 读文件/n");printf(" 4 - 写文件/n");printf(" 5 - 关闭文件/n");printf(" 6 - 删除文件/n");printf(" 7 - 建立目录/n");printf(" 8 - 显示目录内容/n");printf(" 9 - 显示文件内容/n");printf(" 10 - 改变文件属性/n");printf(" 选择功能项(0~9):");scanf("%d",&a);switch(a){case 0: /*a=0程序结束*/fclose(fc);exit(0);case 1: /*a=1建立文件*/printf("输入文件路径名和文件属性(1-只读文件,3-只读系统文件,4-普通文件):");scanf("%s%d",name,&attribute);create_file(name,attribute); /*建立文件*/break;case 2: /*a=2打开文件*/printf("输入文件路径名和操作类型(0-读文件,1-写文件):");scanf("%s%d",name,&type);open_file(name,type); /*打开文件*/break;case 3: /*a=3读文件*/printf("输入文件路径名和读长度");scanf("%s%d",name,&length);read_file(name,length); /*读文件*/break;case 4: /*a=4写文件*/printf("输入文件路径名:");scanf("%s",name);printf("输入写的内容和和写长度");scanf("%s%d",buffer,&length);write_file(name,buffer,length); /*写文件*/break;case 5: /*a=5关闭文件*/printf("输入文件路径名");scanf("%s",name);close_file(name); /*关闭文件*/break;case 6: /*a=6删除文件*/printf("输入文件路径名");scanf("%s",name);delete(name); /*删除文件*/break;case 7: /*a=7建立目录*/printf("输入目录路径名");scanf("%s",name);md(name); /*建立目录*/break;case 8: /*a=8显示目录*/printf("输入目录路径名");scanf("%s",name);dir(name); /*显示目录*/break;case 9: /*a=9显示文件*/printf("输入文件路径名");scanf("%s",name);typefile(name); /*显示文件*/break;case 10:/* a=10改变文件属性*/printf("输入文件路径名和文件属性(1-只读文件,3-只读系统文件,4-普通文件):");scanf("%s%d",name,&attribute);change(name,attribute);}/* switch */}/* while */}/*main( )结束*/。