操作系统原理课程设计-Linux文件系统的仿真实现_第1页
操作系统原理课程设计-Linux文件系统的仿真实现_第2页
操作系统原理课程设计-Linux文件系统的仿真实现_第3页
操作系统原理课程设计-Linux文件系统的仿真实现_第4页
操作系统原理课程设计-Linux文件系统的仿真实现_第5页
已阅读5页,还剩30页未读, 继续免费阅读

下载本文档

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

文档简介

1、操作系统课程设计实验报告全套设计加扣 3012250582任务:虚拟磁盘,文件系统的初始化,文件目录树的建立,求助和显示目录内容的函数,子目录的创建,删除,更改函数组员: 学号:专业:计科121 任务:用户的注册和登录,文件的创建,打开,关闭读取,写入,删除和退出函数是否申请优秀: 否 Linux文件系统的仿真实现课程设计摘要:实验目的:理解并实现文件的物理结构,理解具体的文件存储空间的管理,理解并构建文件目录树结构实现文件操作的实现,加深对文件系统内部数据结构、功能以及实现过程的理解。实验方法:模拟物理结构磁盘和建立目录结构树实现对文件和目录的具体操作。实验结果:实现了物理磁盘的模拟,用户登

2、录系统的建立,文件目录树的建立及对文件和目录的基本操作。结论:对Linux文件系统的结构有了更深的了解,对一些结构体的建立与运用变得更加娴熟。关键字: 磁盘 用户文件打开表 目录树 FAT文件系统1. 理论基础 操作系统教程(第五版)的第六章文件管理,Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。Linux文件系统结构,在软件上分为三层应用层、虚拟层和实现层。应用层提供用户接口,可以使用标准文件类系统调用来使用文件;虚拟层屏蔽具体文件系统差异和细节,为上层应用程序和下层

3、内核管理模块提供统一接口;实现层通过切换技术接到具体文件系统,实现各种具体的文件系统的具体操作。2. 目的及意义2.1目的(1)理解并实现文件的物理结构,(2)理解具体的文件存储空间的管理,(3)理解并构建文件目录树结构实现文件操作的实现,(4)加深对文件系统内部数据结构、功能以及实现过程的理解。2.2意义通过对Linux文件系统的模拟实现,我们加深对操作系统的认知,使我们从表面更加深入到操作系统内在的知识,同时对我们以后的工作和求学道路上打下了一个坚实的基础。也增涨了动手实践和撰写报告的能力。3. 设计思想及设计功能说明3.1设计思想 首先建立一个整体的文件系统架构,文件系统架构是将之后自己

4、所要完成的文件的具体内容列的一个清单,这样可以让自己在做课程设计时能有章法可依,不至于太乱,没有条理。通过对文件系统的了解,对实现的虚拟Linux文件系统分成两部分实现。 其次物理结构磁盘的虚拟,以一个真实的文件来模拟一块磁盘。因为要在内存中开辟一个虚拟磁盘空间作为文件存储分区,在其上实现一个简单的基于多级目录的单用户单任务系统中的文件系统。在退出该文件系统的使用时,应将该虚拟文件系统以一个Windows 文件的方式保存到磁盘上,以便下次可以再将它恢复到内存的虚拟磁盘空间中。 最后对目录树的构建,建立与磁盘的联系,完成对文件的基本操作。3.2设计功能说明 (1)在内存中开辟一个虚拟磁盘空间作为

5、文件存储分区,在其上实现一个简单的基于多级目录的单用户单任务系统中的文件系统。在退出该文件系统的使用时,应将该虚拟文件系统以一个Windows 文件的方式保存到磁盘上,以便下次可以再将它恢复到内存的虚拟磁盘空间中。 (2)文件存储空间的分配可采用显式链接分配或其他的办法。 (3)空闲磁盘空间的管理可选择位示图或其他的办法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,那么可以将位示图合并到FAT中。 (4)文件目录结构采用多级目录结构。为了简单起见,可以不使用索引结点,其中的每个目录项应包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。要求提供以下有关的操

6、作命令:format:对文件存储器进行格式化,即按照文件系统的结构对虚拟磁盘空间进行布局,并在其上创建根目录以及用于管理文件存储空间等的数据结构。help:用于查找操作密码。Login:用于用户登录。 mkdir:用于创建子目录。 rmdir:用于删除子目录。 ls:用于显示目录中的内容。 cd:用于更改当前目录。 create:用于创建文件。 open:用于打开文件。 close:用于关闭文件。 write:用于写文件。 read:用于读文件。 rm:用于删除文件。 exit:用于退出文件系统。 (5)实现打开文件函数fopen() 。因为文件在使用之前必须打开,已建立进程与文件之间的联系,

7、而文件描述符唯一的表示这种链接,其任务是把文件的磁盘inode复制到内存活动的inode表中,同时建立一个独立的读写文件数据结构,即系统打开文件表的一个表项。具体实现如下: 1)格式:FILE *fopen(const char *filename,const char *mode) 2)功能:按照指定打开方式打开指定文件。 3)输入参数说明: filename:待打开的文件名,如果不存在就创建该文件。 mode: 文件打开方式,常用的有: r:为读而打开文本文件(不存在则出错)。 w:为写而打开文本文件(若不存在则创建该文件;反之,则从文件起始位置写,原内容将被覆盖)。 a:为在文件末尾添加

8、数据而打开文本文件。(若不存在则创建该文件;反之,在原文件末尾追加)。 r+:为读和写而打开文本文件。(读时,从头开始;在写数据时,新数据只覆盖所占的空间,其后不变) 。 w+:首先建立一个新文件,进行写操作,随后可以从头开始读。(若文件存在,原内容将全部消失) 。 a+:功能与a相同;只是在文件末尾添加新的数据后,可以从头开始读。 另外,上述模式字符串中都可以加一个“b”字符,如rb、wb、ab、rb+、wb+、ab+等组合,字符“b”表示fopen() 函数打开的文件为二进制文件,而非纯文字文件。4)输出:一个指向FILE类型的指针。 (6)实现关闭文件函数fclose()。因为文件使用完

9、毕,执行关闭系统调用切断应用进程与文件之间的联系。其调用形式为close(fd)。显然,要关闭的文件先前已打开,故文件一定存在描述符fd。实现具体如下: 1)格式:int fclose(FILE * stream); 2)功能:用来关闭先前fopen()打开的一个文件。此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。 3)输入参数说明: stream:指向要关闭文件的指针,它是先前执行fopen()函数的返回值。 4)输出:若关闭文件成功则返回0;有错误发生时则返回EOF并把错误代码存到errno。 (7)实现读文件函数fread()。因为文件的读是文件最基本的操作,”读”指文

10、件的内容读入用户数据区中。从文件的那个位置读入数据,由系统文件表中的f_offset决定。具体实现如下: 1)格式:size_t fread( void *buffer, size_t size, size_t count, FILE *stream ); 2)功能:读二进制文件到内存。 3)输入参数说明: buffer:用于存放输入数据的缓冲区的首地址; stream:使用fopen()打开的文件的指针,用于指示要读取的文件; size: 每个数据块的字节数; count: 要读入的数据块的个数; size*count:表示要求读取的字节数。 4)输出:实际读取的数据块的个数。 (8)实现写

11、文件fwrite()。因为文件的写是文件最基本的操作,“写”指把用户数据区中信息写入文件中。从文件的那个位置写入数据,由系统文件表中的f_offset决定。具体实现如下: 1)格式:size_t fwite(const void *buffer,size_t size,size_t count,FILE *stream); 2)功能:将数据写到二进制文件中。 3)输入参数说明: buffer:用于存放输出数据的缓冲区的首地址; stream:使用fopen()打开的文件的指针,用于指示要写出的文件; size: 每个数据块的字节数; count: 要写出的数据块的个数; size*count:

12、表示要求写出的字符数。4)输出:实际写出的数据块的个数。 (9)判断文件结束函数feof()。 1)格式:int feof(FILE * stream) 2)功能:用来判断是否已读取到文件末尾。 3)输入参数说明:stream:使用fopen()打开的文件的指针,用于指示要判断的文件。 4)输出:如果已读到文件尾则返回非零值,其他情况返回0。4. 核心数据结构说明 (1)文件控制块,包含文件的名字,种类,大小以及和物理结构磁盘的关联(当前盘块和当前父目录盘块号)。其中initialize是对文件进行初始化。struct FCB char fname16; /文件名char type; / 0空

13、文件 1目录文件 2空文件 int size; /文件大小int fatherBlockNum; /当前的父目录盘块号int currentBlockNum; /当前的盘块void initialize()strcpy(fname,0);type = Zero;size =0;fatherBlockNum = currentBlockNum = 0; (2)用户文件打开表,包含当前打开文件数,对文件赋予普通文件类型。struct OPENLISTint files; /当前打开文件数FCB fOPEN_MAX; /FCB拷贝OPENLIST()files=0;for(int i=0;iOPEN

14、_MAX;i+)fi.fatherBlockNum = -1;/为分配打开fi.type=GENERAL; (3)磁盘结构,包含保留扇区,FAT1,FAT2,根目录区和数据区,将磁盘按照FAT文件系统的磁盘区分配,并建立磁盘操作系统指针OSpoint。其中保留扇区包括一个称为基本输入输出参数块的区域(包括一些基本的文件系统信息尤其是它的类型和其它指向其它扇区的指针),通常包括操作系统的启动调用代码。struct DISKint FAT1BlockCount; /FAT1int FAT2BlockCount; /FAT2struct dirFile root; /根目录char dataBloc

15、kCount-3BlockSize;void format()memset(FAT1,0,BlockCount); /FAT1memset(FAT2,0,BlockCount); /FAT2FAT10=FAT11=FAT12=-2; /0,1,2盘块号依次代表FAT1,FAT2,根目录区FAT20=FAT21=FAT22=-2; /FAT作备份root.init(2,2,C:);/根目录区memset(data,0,sizeof(data);/数据区; (4)目录文件结构,是对目录文件的初始化,包括对目录的属性设定,还有对目录项的属性(属于子项,空白项)等等。struct dirFilestr

16、uct FCB fcbBlockFcbCount;void init(int _FatherBlockNum,int _CurrentBlockNum,char *name)/父块号,当前块号,目录名strcpy(fcb0.fname,name); /本身的FCBfcb0.fatherBlockNum=_FatherBlockNum;fcb0.currentBlockNum=_CurrentBlockNum;fcb0.type=DIRECTORY; /标括记目录文件for(int i=1;iBlockFcbCount;i+)fcbi.fatherBlockNum=_CurrentBlockNu

17、m; /标括记为子项fcbi.type=Zero; / 标记为空白项;(5) 用户登陆结构,包括用户名,密码,结构体指针。typedef struct student char UsernameN; /用户名 char PasswordN; /密码 struct student *next; list;list *head=NULL,*user=NULL;(6)磁盘i节点结构,包括关联文件数,文件属性和存取权限,文件主标识,文件大小,物理块号。struct DISKinode/* 磁盘i节点的所有变量在内存i节点中都有相应的变量与之相适应 */unsigned short DISK_RELAT

18、IONNUMBER ;/* 关联文件数*/unsigned short DISK_ATTRIBUTE;/* 文件属性与存取权限*/unsigned short DISK_MAINFLAG;/* 文件主标括识*/unsigned short DISK_GROUPUSERFLAG;/* 同组用户标识*/unsigned short DISK_SIZE;/* 文件大小*/unsigned int DISK_PHYSICSNUMBERPHYSICSDISKSN;/* 物理块号*/;5. 核心算法流程5.1文件系统更改当前目录 目录基本操作 子目录删除 子目录创建 显示目录 文件基本操作 文件关闭 文件

19、写入 文件读取 文件删除 文件创建 文件打开开始 登陆注册 磁盘初始化 系统初始化 加载磁盘文件 目录树创建5.2登录系统 登录 改密 注册 进入 登录是否改密第一次 登录 开始 NN Y Y 指针 文件 FAT2 数据区 根目录区 保留扇区 FAT15.3磁盘的结构6.开发调试及运行环境开发环境是Microsoft Visual Studio 2010,运用其内在的VC+进行开发调试。运行环境XP以上均可。7. 功能说明及测试数据分析(1)用户登录与注册(2)文件系统的的格式化 (3)多级目录的创建和进入,形成一级级目录(4)显示多级目录下的文件种类和个数 (5)创建文件,并对文件进行打开,

20、读取,写入。 (6)文件的关闭和在当前目录下的删除,并没有级联删除(7)文件子目录下的文件类型种类的显示8.存在问题(改进及其他思想)8.1问题(1) 在开始处,对用户的注册和登录体现不够。(2) 文件的读写,在写入时发现用txt格式下打开并不能显示正确内容而是乱码。(3) 在指针调用时,有时会出错,导致调用函数出现了问题。(4)密码格式不能立即查看。8.2改进及其他思想 (1)增加help函数,可以任意调查操作密码,增加了灵活性。 (2)增加了login函数对用户的注册和登录进行了完善,并增加了删除用户操作。 (3)对指针的调用进行了完善,解决了调用时出现的问题。 (4)创建了多级目录结构可

21、以建立多个子系统下的子系统。 (5)还可以增加文件的权限,对读写进行限制。9.实践体会及心得 整体:在此次操作系统课程设计中,我和组员收获很大,对文件系统的了解也加深了。对物理结构的虚拟和文件系统的建立有了更深刻的认识。在一些复杂问题上也从中摸到些许门路,以后会继续加深,直到真的领悟。 组长:在对物理结构磁盘的虚拟中,加深了对磁盘的了解,对磁盘有了更加的深刻认识。对文件目录树的创建,使得对结构体的运用更加熟悉。同时也增加了代码的书写和优化能力。 组员:小组分工实验的团队合作、相互沟通是非常重要的,小组成员之间要相互学习彼此的优点与技术,使得小组能力不断提高。这样,在实践过程中,才不会被难题困住

22、不动,而导致实践停滞不前,毫无进展。而实验分析的好坏将决定着系统开发成功与否,一份好的分析设计僵尸成功开发的主要因素。我们在着手实践之前先不要急于写代码,应先由较长的实践把分析做好,写出相关的分析文档,然后再开始写代码,这样做到每写一步代码心里有底,有条不紊。10. 参考文献(1) 基于VRMap的农区可视化仿真系统设计与实现作者:刘小军,张宇鸥,陆震洲,杨雪等。(2) 基于模型和WebGIS的数字油作系统设计与实现作者:于少雄,刘小军,孙传范。(3) 操作系统教程(第五版)作者:费祥林,骆斌。(4) 操作系统设计与实现 作者:Tanebaum。(5) KHB:A Filesystems re

23、ading list 作者:lwn。11. 带注释的核心部分源码#define GENERAL 1 /1代表普通文件#define DIRECTORY 2 /2 代表目录文件#define Zero 0 /0表示空文件#define N 20#define PHYSICSDISKSN13/* 物理块号数 */*-文件控制块-*/struct FCB char fname16; /文件名char type; / 0空文件 1目录文件 2空文件 int size; /文件大小int fatherBlockNum; /当前的父目录盘块号int currentBlockNum; /当前的盘块void

24、initialize()strcpy(fname,0);type = Zero;size =0;fatherBlockNum = currentBlockNum = 0; /*-用户登录结构-*/typedef struct student char UsernameN; /用户名 char PasswordN; /密码 struct student *next; list;list *head=NULL,*user=NULL;const char* FilePath = C:myfiles;/*常量设置*/const int BlockSize = 512; /盘块大小const int O

25、PEN_MAX = 5; /能打开最多的文件数const int BlockCount = 128; /盘块数const int DiskSize = BlockSize * BlockCount; /磁盘大小const int BlockFcbCount = BlockSize/sizeof(FCB);/目录文件的最多FCB数int OpenFileCount = 0; / 统计当前打开文件数目 /*用户文件打开表*/struct OPENLIST int files; /当前打开文件数FCB fOPEN_MAX; /FCB拷贝OPENLIST()files=0;for(int i=0;iO

26、PEN_MAX;i+)fi.fatherBlockNum = -1;/为分配打开fi.type=GENERAL;/* 磁盘i节点数据结构 */struct DISKinode/* 磁盘i节点的所有变量在内存i节点中都有相应的变量与之相适应 */unsigned short DISK_RELATIONNUMBER ;/* 关联文件数 */unsigned short DISK_ATTRIBUTE;/* 文件属性与存取权限 */unsigned short DISK_MAINFLAG;/* 文件主标识 */unsigned short DISK_GROUPUSERFLAG;/* 同组用户标识 */

27、unsigned short DISK_SIZE;/* 文件大小 */unsigned int DISK_PHYSICSNUMBERPHYSICSDISKSN;/* 物理块号 */;/*-目录文件结构-*/struct dirFilestruct FCB fcbBlockFcbCount;void init(int _FatherBlockNum,int _CurrentBlockNum,char *name)/父块号,当前块号,目录名strcpy(fcb0.fname,name); /本身的FCBfcb0.fatherBlockNum=_FatherBlockNum;fcb0.current

28、BlockNum=_CurrentBlockNum;fcb0.type=DIRECTORY; /标记目录文件for(int i=1;iformat();/打开文件列表初始化delete openlist;openlist=new OPENLIST;/*-保存到磁盘上myfiles-*/fp = fopen(FilePath,w+);fwrite(BaseAddr,sizeof(char),DiskSize,fp);fclose(fp);printf(格式化成功!n);return 1;/*-用户注册函数-*/int Register() char usernameN,passwordN; li

29、st *pNewStudent,*h=head; int regOK; while(1) regOK=1; printf(登录 用户:); scanf(%s,username);printf(登录 密码:); scanf(%s,password); h=head; while(h!=NULL) if(strcmp(h-Username,username)=0) regOK=0; break; h=h-next; if(regOK=1) pNewStudent=(list *)malloc(sizeof(list); strcpy(pNewStudent-Username,username);

30、strcpy(pNewStudent-Password,password); pNewStudent-next=head; head=pNewStudent; break; else printf(已经有相同用户名!请重新); return 0;/*-用户登录函数-*/list* Login() list *h; char usernameN; char passwordN; int findOK; while(1) h=head; findOK=0; printf(登录 用户:); scanf(%s,username);printf(登录 密码:); scanf(%s,password);

31、while(h!=NULL) if(strcmp(h-Username,username)=0 & strcmp(h-Password,password)=0) findOK=1; break; h=h-next; if(findOK=1) printf(欢迎用户 %sn,username); return h; /break; else printf(用户名或密码有错!请重新); /*-创建子目录-*/int mkdir(char *sonfname)/判断是否有重名寻找空白子目录项寻找空白盘块号当前目录下增加该子目录项分配子目录盘块,并且初始化修改fat表int i,temp,iFAT;s

32、truct dirFile *dir; /当前目录的指针if(current = 2) / 根目录 dir=&(osPoint-root);elsedir=(struct dirFile *)(osPoint-data current-3);/*-为了避免该目录下同名文件夹-*/for(i = 1;ifcbi.type=DIRECTORY & strcmp(dir-fcbi.fname,sonfname)=0 )printf(该文件夹下已经有同名的文件夹存在了!n);return 0;for(i = 1;i fcbi.type=Zero)break;if(i = BlockFcbCount)p

33、rintf(该目录已满!请选择新的目录下创建!n);return 0;temp = i;for(i = 3;i FAT1i = 0)break;if(i = BlockCount)printf(磁盘已满!n);return 0;iFAT=i;/*-接下来进行分配-*/osPoint-FAT1iFAT=osPoint-FAT2iFAT = 2; /2表示分配给下级目录文件/填写该分派新的盘块的参数strcpy(dir-fcbtemp.fname,sonfname);dir-fcbtemp.type=DIRECTORY;dir-fcbtemp.fatherBlockNum=current;dir-

34、fcbtemp.currentBlockNum=iFAT;/初始化子目录文件盘块dir=(struct dirFile*)(osPoint-data iFAT-3); /定位到子目录盘块号dir-init (current,iFAT,sonfname);/iFAT是要分配的块号,这里的current用来指要分配的块的父块号printf(创建子目录成功!n);return 1;/*-删除当前目录下的文件夹-*/int rmdir(char *sonfname)int i,temp,j;/确保当前目录下有该文件,并记录下该FCB下标struct dirFile *dir; /当前目录的指针if(c

35、urrent=2)dir=&(osPoint-root);elsedir=(struct dirFile *)(osPoint-data current-3);for(i=1;ifcbi.type=DIRECTORY & strcmp(dir-fcbi.fname,sonfname)=0)break;temp=i;if(i=BlockFcbCount)printf(当前目录下不存在该子目录!n);return 0;j = dir-fcbtemp.currentBlockNum;struct dirFile *sonDir; /当前子目录的指针sonDir=(struct dirFile *)(

36、osPoint-data j - 3);for(i=1;ifcbi.type!=Zero)printf(该文件夹为非空文件夹,为确保安全,请清空后再删除!n);return 0;/*开始删除子目录操作*/osPoint-FAT1j = osPoint-FAT2j=0; /fat清空char *p=osPoint-dataj-3; /格式化子目录memset(p,0,BlockSize);dir-fcbtemp.initialize(); /回收子目录占据目录项 printf(删除当前目录下的文件夹成功n);return 1;/*-在当前目录下创建文本文件-*/int create(char *

37、name)int i,iFAT;/temp,int emptyNum = 0,isFound = 0; /空闲目录项个数struct dirFile *dir; /当前目录的指针if(current=2)dir=&(osPoint-root);elsedir=(struct dirFile *)(osPoint-data current-3);for(i=1;ifcbi.type = Zero & isFound = 0)emptyNum = i;isFound = 1;else if(dir-fcbi.type=GENERAL & strcmp(dir-fcbi.fname,name)=0

38、)printf(无法在同一目录下创建同名文件!n);return 0;if(emptyNum = 0)printf(已经达到目录项容纳上限,无法创建新目录!n);return 0;for(i = 3;iFAT1i=0)break;if(i=BlockCount)printf(磁盘已满!n);return 0;iFAT=i;/*-进入分配阶段-*/分配磁盘块osPoint-FAT1iFAT = osPoint-FAT2iFAT = 1;/*-接下来进行分配-*/填写该分派新的盘块的参数strcpy(dir-fcbemptyNum.fname,name);dir-fcbemptyNum.type=

39、GENERAL;dir-fcbemptyNum.fatherBlockNum=current;dir-fcbemptyNum.currentBlockNum=iFAT;dir-fcbemptyNum.size =0;char* p = osPoint-dataiFAT -3;memset(p,4,BlockSize);printf(在当前目录下创建文本文件成功!n);return 1;/*-查询子目录-*/int listshow()int i,DirCount=0,FileCount=0;/搜索当前目录struct dirFile *dir; /当前目录的指针if(current=2)dir

40、=&(osPoint-root);elsedir=(struct dirFile *)(osPoint-data current-3);for(i=1;ifcbi.type=GENERAL) /查找普通文件FileCount+;printf(%s 文本文件.n,dir-fcbi.fname);if(dir-fcbi.type=DIRECTORY) /查找目录文件DirCount+;printf(%s 文件夹.n,dir-fcbi.fname);printf(n该目录下共有 %d 个文本文件, %d 个文件夹nn,FileCount,DirCount);return 1;/*-在当前目录下删除文

41、件-*/int delfile(char *name)int i,temp,j;/确保当前目录下有该文件,并且记录下它的FCB下标struct dirFile *dir; /当前目录的指针if(current = 2)dir=&(osPoint-root);elsedir=(struct dirFile *)(osPoint-data current-3);for(i=1;i fcbi.type=GENERAL & strcmp(dir-fcbi.fname,name)=0)break;if(i = BlockFcbCount)printf(当前目录下不存在该文件!n);return 0;in

42、t k;for(k=0;kf k.type = GENERAL)&(strcmp(openlist-f k.fname,name)=0)if(openlist-fk.fatherBlockNum = current)break;elseprintf(该文件未在当前目录下!n);return 0;if(k!=OPEN_MAX)close(name);/从打开列表中删除/*开始删除文件操作*/temp=i;j = dir-fcb temp.currentBlockNum ; /查找盘块号josPoint-FAT1j=osPoint-FAT2j=0; /fat1,fat2表标记为空白char *p=osPoint-dataj - 3;memset(p,0,BlockSize); /清除原文本文件的内容dir-fcbtemp.initialize(); /type=0; /标记该目录项为空文件printf(在当前目录下删除文件成功!n);retur

温馨提示

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

评论

0/150

提交评论