操作系统课程设计模拟DOS文件的建立与使用
DOS功能调用及汇编语言程序设计举例

DOS功能调⽤及汇编语⾔程序设计举例DOS功能调⽤及汇编语⾔程序设计举例5.1 DOS功能调⽤DOS-磁盘操作系统,象WINDOS操作系统⼀样是进⾏计算机系统管理的软件,在WINDOS 以前,PC机上主要应⽤的是DOS 操作系统,两者间的最⼤区别是在DOS 操作系统下,⽤户可以利⽤⾃⼰所编的程序直接对外设(硬件端⼝)进⾏操作,如对磁盘进⾏读写,对打印机进⾏控制等,⽽在WINDOS操作系统下,⽤户只能通过特有的驱动程序才能对其进⾏操作,因为所有外设均被WINDOS操作系统统⼀管理,⽤户⽆法在⾃⼰的程序中对他门进⾏操作。
1、DOS功能在PC机的操作系统(DOS)的安装过程中,将⼀些常⽤的⼦程序安装到了内存单元中,⽤户可以在编写⾃⼰的⽤户程序时,进⾏调⽤。
其中有两种:BIOS⼦程序:功能管理与计算机相连接的外部设备(显⽰器、键盘、磁盘驱动)程序,称为基本输⼊输出系统(basic Input/output system)这部分程序是存放在ROM 区所以通常称为:ROM BIOSDOS功能程序:与BIOS程序⼀样,DOS功能程序也是计算机操作系统开发⼈员编写的⼀些常⽤的⽤于磁盘⽂件管理的⼦程序,主要⽤于磁盘⽂件的建⽴、打开、读写、关闭,⽤户同样可以在⾃⼰的程序中对他们进⾏调⽤,简化⽤户程序的开发。
与BIOS不同的是DOS功能程序是存放在硬盘上的,在系统上电时,由操作系统,将其安装到内存中的,称为常驻内存程序。
⽤户调⽤这两种程序⼀般采⽤中断指令进⾏调⽤:DOS功能的调⽤⽅法:1、在AH中写⼊功能调⽤号2、在指定的寄存器中设置⼊⼝参数3、⽤INT 21 指令执⾏调⽤4、根据出⼝参数分析调⽤执⾏情况实际上,所有的DOS 功能⼦程序被组成了⼀个⼤程序存放在内存单元中,从nn1:nn2 开始的单元中,在操作系统上电进⾏系统初始化时,将nn1:nn2 存放到了中断向量表中,0000H:0084H开始的连续4个单元中,当⽤户在⽤户程序中⽤INT 21H 调⽤DOS的某⼀个功能时,即控制程序转移到nn1:nn2 开始的程序,在这段程序中⾸先根据AH中的功能,可以分析出⽤户调⽤的哪⼀个功能从⽽在转到相应地⽅执⾏相应的程序段。
DOS操作系统模拟

撰写课程设计报告;
验收程序、答辩。
每人的光盘目录内含:
(1)源程序文件和可执行程序文件(以班级为单位刻录光盘上交);
(2)打印课程设计任务书一份;
(3)打印课程设计报告一份(小组内每人一份,要求具体内容不能相同)。
4.课程设计工作进度计划:
起迄日期
工作内容
2012年
5月29日~5月30日
5月31日~6月7日
6月8日
6月9日
选择课程设计题目,明确课程设计任务;查阅书籍,收集资料,确定设计方案和思路;
1)进一步巩固和复习C/C++程序设计的基础知识。
2)培养学生结构化程序、模块化程序设计的方法和能力。
3)了解软件的编制过程及各环节的具体内容
4)提高学生程序调试技巧、软件设计能力和代码规范化等素质
5)提高学生分析问题、解决问题以及实际运用能力
2.课程设计的具体工作内容:
1)熟悉常用的DOS命令。息
3)实现copy的功能,复制一个或一组文件到指定的磁盘或目录中
4)实现type的功能,在屏幕上显示文本文件内容命令
5)实现cls的功能,清除显示器屏幕上的内容,使DOS提示符到屏幕左上角。
6)或者实现别的DOS命令的功能也可以,至少实现四个以上。
课 程 设 计 任 务 书
3.对课程设计成果的要求:
提交课程设计报告和光盘(每班统一制作1张光盘,每人一个目录)。
中北大学
课程设计任务书
学院、系:
软件学院
专业:
软件工程
学 生 姓 名:
学 号:
设 计 题 目:
简易DOS操作系统模拟显示
起迄日期:
第3章 案例4 DOS操作系统及基本操作精品PPT课件

任务3
常用DOS内部命令
1、清屏命令CLS 2、日期命令DATE 3、时间命令 4、显示DOS版本命令CER
任务4 常用DOS内部命令——文件操作命令DIR
1、列文件清单DIR 功能:显示指定目录或文件的目录信息。
格式:DIR [d:][path][文件名] [/P][/W][/S][/A][/O[SORTORDER]] 说明:略
任务3
常用DOS内部命令、外部命令
常用DOS外部命令:
1、FORMAT()--格式化命令 2、EDIT()--编辑命令 3、SYS()--系统引导文件传输命令 4、ATTRIB(Attrib.EXE)--文件属性设置命令 5、XCOPY(Xcopy.EXE)--拷贝命令 6、SCANDISK(Scandisk.EXE)--磁盘扫描程序 7、CHKDSK(Chkdsk.EXE)--磁盘检查命令 8、MOVE(Move.EXE)--文件移动命令 9、DELTREE(Deltree.EXE)--删除命令 10、FDISK(Fdisk.EXE)--分区命令
(2) 若当前文件夹AA,显示BB子目录下的所有文件及下级子目录文件; 命令:方法1:D:\MM\AA>dir D:\mm\BB\*.*/S↙(绝对路径) 方法2:D:\MM\AA>dir mm\BB\*.*/S↙(绝对路径)
思考可不可以 用相对路径?
任务4 常用DOS内部命令——文件操作命令COPY
任务1
DOS磁盘操作系统
2.DOS的组成
DOS由四部分组成: (1)DOS引导程序 (2)基本输入输出系统IO.SYS (3)DOS内核MSDOS.SYS (4)命令处理程序 磁盘格式化为系统盘时,写入磁盘,可用该盘启动系统。
DOS操作系统基本使用方法

c:>copy source destination
2.常用DOS命令
关于文件的命令
(1)查看文件:type [d:] [path] <filename> (内部命令)
注:·此命令只能用于查看由ASCII码
CON,AUX,PRN,COM1,COM2,LPT1,LPT2,NUL 这些是DOS系统保留字。特指某些设备。
例如,CON表示控制台,PRN表示打印机...它们也不能用作文件名来使用。
符号"*"和"?"是通配符。通常在文件名中使用。"*"表示在此字符处可以用任意个
DOS操作系统基本使用方法
DOS的主要功能和构成
DOS的启动
文件和文件管理
基本DOS命令
DOS的主要功能和构成
1.主要功能:文件管理、内存管理、设备管理、作业管理和CPU管理。
根目录:隐含于一个软盘,或者一个硬盘的一个分区中。根目录是DOS中唯一不能删
除的一个目录。通常以“\”表示。根目录中登录的子目录和文件存放在磁盘的文件
区(数据区)之前的固定几个扇区内。
目录树:根目录在最顶层。它包含的子目录是一级子目录。每一个一级子目录又可
以包含若干二级子目录...,这样的组织结构就叫做目录树。
是由三部分组成的:命令字、文件标识和参数。
<命令字> [<文件标识>] [开关参数1] [开关参数2]... [开关参数n]
DOS常用命令实训报告

实验报告一、实验目的1、了解DOS操作系统。
2、熟练使用DOS的文件和目录常用操作命令。
二、实验准备1、一张能进入DOS系统的启动盘。
2、一台可正常运行的计算机(带光驱)。
三、实验注意事项1、实训前复习常用的DOS命令。
四、实验内容及步骤1、开机进入BIOS设置程序,将第一启动项设为光驱启动。
2、将DOS启动盘插进光驱,进入DOS系统。
3、在C盘根目录下输入“dir/w”或“dir/p”查看C盘根目录下的文件信息4、输入“cd 123”,进入123文件夹目录5、输入“copy c:\123.txt d:\”将C盘根目录下的123.txt文件复制到D盘根目录。
6、输入“del c:\123.txt”删除C盘下的123.txt文件7、输入“deltree c:\123”删除C盘下的123整文件夹。
8、输入“md 123”在当前目录下新建目录123。
9、输入“rd 123”删掉目录123。
10、输入“move c:\123.txt d:\”将C盘下123.txt移到D盘。
11、输入“date”查看当前日期,输入“date 05-01-2012”将时间改为2012年5月01日。
12、输入“cls”清屏13、输入“label c 123”回车后再输入原来的卷标回车,按下“Y”确认,将C盘卷标改为123.14、输入“convert d: /fs:ntfs”将D盘由原来的FAT32格式转为NTFS格式。
五、实验体会通过这次实训,让我初步了解了DOS这个系统,并学习了一些DOS常用的命令,也认识到DOS在维护中的作用是很重要的,DOS系统的确已经完全被取代,但DOS命令仍作为使用Windows之余的一个有益补充,用来解决很多WIindows解决不了的问题。
报告人。
操作系统课程设计-模拟一个简单二级文件管理系统

模拟一个简单二级文件管理系统设计目的:通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。
设计内容:模拟一个简单二级文件管理系统一、实验内容描述1 实验目标本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现.2 实验要求为DOS系统设计一个简单的二级文件系统.要求做到以下几点:①可以实现下列命令:login 用户登录dir 列文件目录create 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件②列目录时要列出文件名、物理地址、保护码和文件长度.③源文件可以进行读写保护.二、程序主要内容1设计思路程序中要求每个用户在登陆后才可对其拥有的文件进行操作,用户对于其他用户的文件无操作权.文件操作包括浏览、创建、删除、打开、关闭、阅读、写入、修改模式.其他操作包括新建用户、帮助、用户登入、用户登出、退出系统.在程序文件夹下有个名为“file”的系统根目录,此目录下包括:一个名为“mfd”的文件,记录所有注册过的帐号及密码;用户文件,以用户名作为文件名,内容为其拥有的文件名及属性;一个名为“keiji”的文件夹.“keiji”文件夹中包括:“file.p”指针文件,记录所有已用的物理地址;一些以物理地址为名的文件,内容为文件内容.2 数据结构file结构体系统文件数据结构:fpaddrint,文件的物理地址、flengthint,文件长度、fmodeint,文件模式0.只读;1.可写;2.可读写;3.保护、fname[]char,文件名;filemode结构体文件状态数据结构:isopenint,文件当前状态,0.关闭;1.打开、modeint,文件模式0.只读;1.可写;2.可读写;3.初始化;user结构体用户信息数据结构:uname[]char,用户名、upassword[]char,用户密码;userfile结构体用户文件数据结构:uname[]char,用户名、ufile[]file,用户拥有的文件数组.代码:#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <time.h>#include <string.h>#define MaxUser 100 //定义最大MDF主目录文件#define MaxDisk 512*1024 //模拟最大磁盘空间#define commandAmount 12 //对文件操作的指令数//存储空间管理有关结构体和变量char disk[MaxDisk]; //模拟512K的磁盘存储空间typedef struct distTable //磁盘块结构体{int maxlength;int start;int useFlag;distTable *next;}diskNode;diskNode *diskHead;struct fileTable //文件块结构体{char fileName[10];int strat; //文件在磁盘存储空间的起始地址int length; //文件内容长度int maxlength; //文件的最大长度char fileKind[3]; //文件的属性——读写方式struct tm *timeinfo;bool openFlag; //判断是否有进程打开了该文件//fileTable *next;};//两级目录结构体typedef struct user_file_directory //用户文件目录文件UFD {//char fileName[10];fileTable *file;user_file_directory *next;}UFD;//UFD *headFile;typedef struct master_file_directory //主文件目录MFD{char userName[10];char password[10];UFD *user;}MFD;MFD userTable[MaxUser];int used=0; //定义MFD目录中用已有的用户数//文件管理void fileCreate(char fileName[],int length,char fileKind[]); //创建文件void fileWrite(char fileName[]); //写文件void fileCat(char fileName[]); //读文件void fileRen(char fileName[],char rename[]); //重命名文件void fileFine(char fileName[]); //查询文件void fileDir(char UserName[]); //显示某一用户的所有文件void fileClose(char fileName[]); //关闭已打开的文件void fileDel(char fileName[]); //删除文件void chmod(char fileName[],char kind[]); //修改文件的读写方式int requestDist(int &startPostion,int maxLength); //磁盘分配查询void initDisk(); //初始化磁盘void freeDisk(int startPostion); //磁盘空间释放void diskShow(); //显示磁盘使用情况//用户管理void userCreate();int login();int userID=-1; //用户登录的ID号,值为-1时表示没有用户登录int main(){char order[commandAmount][10];strcpy(order[0],"create");strcpy(order[1],"rm");strcpy(order[2],"cat");strcpy(order[3],"write");strcpy(order[4],"fine");strcpy(order[5],"chmod");strcpy(order[6],"ren");strcpy(order[7],"dir");strcpy(order[8],"close");strcpy(order[9],"return");strcpy(order[10],"exit");strcpy(order[11],"df");char command[50],command_str1[10],command_str2[10],command_str3[5],command_str4[3];int i,k,j;int length;initDisk(); //初始化磁盘for(i=0;i<MaxUser;i++) //初始化用户UFD目录文件的头指针{userTable[i].user=(UFD *)malloc(sizeof(UFD));userTable[i].user->next=NULL;}while(1){printf("********************************************\n");printf(" 1、Creat user\n");printf(" 2、login\n");printf("********************************************\n");printf("Please chooce the function key:>");int choice;scanf("%d",&choice);if(choice==1) userCreate();else if(choice==2) userID=login();else printf("您的输入有误,请重新选择\n");while(userID!=-1){fflush(stdin);printf("———————————————————————————————————————\n ");printf(" create-创建格式:create a1 1000 rw,将创建名为a1,长度为1000字节可读可写的文件\n");printf(" rm-删除格式:rm a1,将删除名为a1的文件\n");printf(" cat-查看文件内容格式:cat a1,显示a1的内容\n");printf(" write-写入格式:write a1\n");printf(" fine-查询格式:fine a1 ,将显示文件a1的属性\n");printf(" chmod-修改格式:chmod a1 r,将文件a1的权限改为只读方式\n");printf(" ren-重命名格式:ren a1 b1 ,将a1改名为b1\n");printf(" dir-显示文件格式:dir aaa,将显示aaa用户的所有文件\n");printf(" df-显示磁盘空间使用情况格式:df\n");printf(" close-关闭文件格式:close a1,将关闭文件a1\n");printf(" return-退出用户,返回登录界面\n");printf(" exit-退出程序\n");printf("————————————————————————————————————————\n");printf("please imput your command:>");gets(command);int select;for(i=0;command[i]!=' '&&command[i]!='\0';i++) //command_str1字符串存储命令的操作类型command_str1[i]=command[i];k=i;command_str1[k]='\0';for(i=0;i<commandAmount;i++){if(!strcmp(command_str1,order[i])){select=i;break;}}if(i==commandAmount){printf("您输入的命令有误,请重新输入\n");continue;}for(i=k+1,k=0;command[i]!=' '&&command[i]!='\0';i++,k++) //commmand_str2字符串存储文件名或用户名command_str2[k]=command[i];command_str2[k]='\0';k=i;switch(select){case 0:for(i=k+1,k=0;command[i]!=' ';i++,k++)command_str3[k]=command[i];command_str3[k]='\0';k=i;j=1;length=0; //初始化文件长度for(i=strlen(command_str3)-1;i>=0;i--) //把字符串转换为十进制{length+=(command_str3[i]-48)*j;j*=10;}for(i=k+1,k=0;command[i]!=' '&&command[i]!='\0';i++,k++)command_str4[k]=command[i];command_str4[k]='\0';fileCreate(command_str2,length,command_str4);break;case 1:fileDel(command_str2);break;case 2:fileCat(command_str2);break;case 3:fileWrite(command_str2);break;case 4:fileFine(command_str2);break;case 5:for(i=k+1,k=0;command[i]!=' '&&command[i]!='\0';i++,k++)command_str3[k]=command[i];command_str3[k]='\0';chmod(command_str2,command_str3);break;case 6:for(i=k+1,k=0;command[i]!='\0';i++,k++)command_str3[k]=command[i];command_str3[k]='\0';fileRen(command_str2,command_str3);break;case 7:fileDir(command_str2);break;case 8:fileClose(command_str2);break;case 9:UFD *p;for(p=userTable[userID].user->next;p!=NULL;p=p->next) //退出用户之前关闭所有打的文件if(p->file->openFlag)p->file->openFlag=false;system("cls");userID=-1;break;case 10:exit(0);break;case 11:diskShow();break;}}}return 0;}void userCreate(){char c;char userName[10];int i;if(used<MaxUser){printf("请输入用户名:");for(i=0;c=getch();i++){if(c==13) break;elseuserName[i]=c;printf("%c",c);}userName[i]='\0';for(i=0;i<used;i++){if(!strcmp(userTable[i].userName,userName)){printf("\n");printf("该用户名已存在,创建用户失败\n");system("pause");return;}}strcpy(userTable[used].userName,userName);printf("\n");printf("请输入密码:");for(i=0;c=getch();i++){if(c==13) break;elseuserTable[used].password[i]=c;printf("*");}userTable[userID].password[i]='\0';printf("\n");printf("创建用户成功\n");used++;system("pause");}else{printf("创建用户失败,用户已达到上限\n");system("pause");}fflush(stdin);}int login(){char name[10],psw[10];char c;int i,times;printf("请输入用户名:");for(i=0;c=getch();i++){if(c==13) break;elsename[i]=c;printf("%c",c);}name[i]='\0';for(i=0;i<used;i++){if(!strcmp(userTable[i].userName,name))break;}if(i==used){printf("\n您输入的用户名不存在\n");system("pause");return -1;}for(times=0;times<3;times++){memset(psw,'\0',sizeof(psw));printf("\n请输入密码:");for(i=0;c=getch();i++){if(c==13) break;elsepsw[i]=c;printf("*");}printf("\n");for(i=0;i<used;i++){if(!strcmp(psw,userTable[i].password)){printf("用户登录成功\n");system("pause");break;}}if(i==used){printf("您输入的密码错误,您还有%d次输入机会\n",2-times);if(times==2) exit(0);}else break;}fflush(stdin);return i;}void initDisk(){diskHead=(diskNode *)malloc(sizeof(diskNode));diskHead->maxlength=MaxDisk;diskHead->useFlag=0;diskHead->start=0;diskHead->next=NULL;}int requestDist(int &startPostion,int maxLength){int flag=0; //标记是否分配成功diskNode *p,*q,*temp;p=diskHead;while(p){if(p->useFlag==0&&p->maxlength>maxLength){startPostion=p->start;q=(diskNode *)malloc(sizeof(diskNode));q->start=p->start;q->maxlength=maxLength;q->useFlag=1;q->next=NULL;diskHead->start=p->start+maxLength;diskHead->maxlength=p->maxlength-maxLength;flag=1;temp=p;if(diskHead->next==NULL) diskHead->next=q;else{while(temp->next) temp=temp->next;temp->next=q;}break;}p=p->next;}return flag;}void fileCreate(char fileName[],int length,char fileKind[]){//int i,j;time_t rawtime;int startPos;UFD *fileNode,*p;for(p=userTable[userID].user->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName)){printf("文件重名,创建文件失败\n");system("pause");return;}}if(requestDist(startPos,length)){fileNode=(UFD *)malloc(sizeof(UFD));fileNode->file=(fileTable *)malloc(sizeof(fileTable)); //这一步必不可少,因为fileNode里面的指针也需要申请地址,否则fileNode->file指向会出错strcpy(fileNode->file->fileName,fileName);strcpy(fileNode->file->fileKind,fileKind);fileNode->file->maxlength=length;fileNode->file->strat=startPos;fileNode->file->openFlag=false;time(&rawtime);fileNode->file->timeinfo=localtime(&rawtime);fileNode->next=NULL;if(userTable[userID].user->next==NULL)userTable[userID].user->next=fileNode;else{p=userTable[userID].user->next;while(p->next) p=p->next;p->next=fileNode;}printf("创建文件成功\n");system("pause");}else{printf("磁盘空间已满或所创建文件超出磁盘空闲容量,磁盘空间分配失败\n");system("pause");}}void freeDisk(int startPostion){diskNode *p;for(p=diskHead;p!=NULL;p=p->next){if(p->start==startPostion)break;}p->useFlag=false;}void fileDel(char fileName[]){UFD *p,*q,*temp;q=userTable[userID].user;p=q->next;while(p){if(!strcmp(p->file->fileName,fileName)) break;else{p=p->next;q=q->next;}}if(p){if(p->file->openFlag!=true) //先判断是否有进程打开该文件{temp=p;q->next=p->next;freeDisk(temp->file->strat); //磁盘空间回收free(temp);printf("文件删除成功\n");system("pause");}else{printf("该文件已被进程打开,删除失败\n");system("pause");}}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileCat(char fileName[]){int startPos,length;int k=0;UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){startPos=p->file->strat;length=p->file->length;p->file->openFlag=true; //文件打开标记printf("*****************************************************\n");for(int i=startPos;k<length;i++,k++){if(i%50==0) printf("\n"); //一行大于50个字符换行printf("%c",disk[i]);}printf("\n\n*****************************************************\n");printf("%s已被read进程打开,请用close命令将其关闭\n",p->file->fileName);system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileWrite(char fileName[]){UFD *p,*q;q=userTable[userID].user;int i,k,startPos;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){if(!strcmp(p->file->fileKind,"r")) //判断文件类型{printf("该文件是只读文件,写入失败\n");system("pause");return;}char str[500];printf("please input content:\n");gets(str);startPos=p->file->strat;p->file->openFlag=true; //文件打开标记p->file->length=strlen(str);if(p->file->length>p->file->maxlength){printf("写入字符串长度大于该文件的总长度,写入失败\n");system("pause");return;}for(i=startPos,k=0;k<(int)strlen(str);i++,k++)disk[i]=str[k];printf("文件写入成功,请用close命令将该文件关闭\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileFine(char fileName[]){UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){printf("********************************************\n");printf("文件名:%s\n",p->file->fileName);printf("文件长度:%d\n",p->file->maxlength);printf("文件在存储空间的起始地址:%d\n",p->file->strat);printf("文件类型:%s\n",p->file->fileKind);printf("创建时间:%s\n",asctime(p->file->timeinfo));printf("********************************************\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void chmod(char fileName[],char kind[]){UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){strcpy(p->file->fileKind,kind);printf("修改文件类型成功\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileRen(char fileName[],char name[]){UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){while(q->next){if(!strcmp(q->next->file->fileName,name)){printf("您输入的文件名已存在,重命名失败\n");system("pause");return;}q=q->next;}strcpy(p->file->fileName,name);printf("重命名成功\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileDir(char userName[]){UFD *p;int i,k;for(i=0;i<MaxUser;i++){if(!strcmp(userTable[i].userName,userName)){k=i;break;}}if(i==MaxUser){printf("没有找到该用户,请检查输入用户名是否正确\n");system("pause");return;}else{p=userTable[k].user->next;printf("******************************************************************************* *\n");printf("文件名文件长度文件在磁盘的起始地址文件类型创建时间\n");for(;p!=NULL;p=p->next)printf("%s %d %d %s %s",p->file->fileName,p->file->maxlength,p->file->strat,p->file->fileKind,asctime(p->file->timeinfo));printf("******************************************************************************* *\n");system("pause");}}void diskShow(){diskNode *p;int i=0,unusedDisk=0;printf("***************************************************************************\n");printf(" 盘块号起始地址容量(bit) 是否已被使用\n");for(p=diskHead;p!=NULL;p=p->next,i++){if(p->useFlag==false) unusedDisk+=p->maxlength;printf(" %d %d %d %d \n",i,p->start,p->maxlength,p->useFlag);}printf("***************************************************************************\n");printf("磁盘空间总容量:512*1024bit 已使用:%dbit 末使用:%dbit\n\n",MaxDisk-unusedDisk,unusedDisk);system("pause");}void fileClose(char fileName[]){UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){p->file->openFlag=false;printf("%s文件已关闭\n",p->file->fileName);system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}运行结果视图:(略)。
dos命令创建文件的命令

dos命令创建文件的命令DOS(Disk Operating System)是一种最早的个人计算机操作系统,它使用命令行界面进行操作。
在DOS命令中,我们可以使用一系列命令来创建文件。
下面,我们将介绍几个常用的DOS命令,帮助大家生动、全面地了解如何使用这些命令来创建文件。
首先,我们要打开DOS窗口,通常可以通过在Windows操作系统上按下Win+R键,然后输入"cmd"来打开。
接下来,我们就可以在DOS 窗口中使用以下命令来创建文件。
1. 创建空白文件:使用"echo"命令可以创建一个空白的文本文件。
例如,我们可以输入以下命令来创建一个名为"test.txt"的空白文本文件: ```echo. > test.txt```这里的"echo."表示输出一个空行,通过将其重定向(使用">"符号)到"test.txt"文件中,就可以将一个空白文件创建成功。
2. 复制文件:使用"copy"命令可以将一个已有文件复制为一个新的文件。
例如,我们可以输入以下命令来将名为"source.txt"的文件复制为名为"target.txt"的新文件:```copy source.txt target.txt```这样,"source.txt"文件的内容将会被复制到"target.txt"文件中。
3. 创建文件夹:使用"mkdir"命令可以创建一个新的文件夹。
例如,我们可以输入以下命令来创建名为"documents"的文件夹:```mkdir documents```这样,一个名为"documents"的文件夹就会在当前目录下创建成功。
计算机导论实验报告-DOS常用命令的使用

西安郵電學院计算机导论实验报告题目:DOS常用命令的使用院系名称:计算机学院专业名称:网络工程班级:网络工程1101 班内序号:学生姓名:指导教师:刘建元、贾晖DOS常用命令的使用一、实验目的掌握Windows环境下DOS命令的操作方法,熟练使用DOS的常用命令。
二、实验要求1、掌握Windows环境与DOS命令操作的切换方式。
2、了解Windows的长文件名与DOS的短文件名的不同要求及转换方式。
3、分清文件、目录与路径,掌握文件名中通配符的使用。
4、掌握DIR、COPY、DEL、TYPE、REN等文件命令和MD、RD、CD等目录命令的使用。
三、实验内容及步骤(一)Windows与DOS的切换在Windows环境下,选择单击【开始】→【程序】→【附件】→【命令提示符】即可进入到DOS命令操作方式下;在DOS方式下,输入“exit”后按“回车”键,或者用鼠标单击窗口的关闭按钮,即可回到Windows环境下。
(二)Windows长文件名与Dos短文件名的不同要求Dos方式下文件名由主文件名和扩展名两部分组成。
其中主文件名占8个字符,是以字母开头的字母和数字的组合,并且中间不允许有空格;扩展名占3个字符,用户可以任意指定,但是有些系统特定的扩展名有其特殊的意义。
Windows方式下文件名的命名规则比较灵活,可以使用任意的ASCⅡ字符,并且以什么字符开头都可以,中间可以有空格。
(三)DOS常用命令操作1、DIR命令该命令用于显示磁盘上全部或部分文件目录清单,共由五部分组成:DIR [盘符][路径][文件名] [命令参数]①②③④⑤部分①是命令关键字,不可缺少,也不能拼写错误。
部分②是指定命令所操作的磁盘,可以缺少,若缺少时命令对当前磁盘进行操作。
DOS规定盘符的书写格式为单个字母+“:”,如“A:”。
部分③是指定命令所操作的目录,可以缺少,若缺少时命令对当前目录进行操作。
DOS规定目录与目录之间用“\”符号分隔。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计说明书题目: 模拟DOS文件的建立与使用院系:计算机科学与工程专业班级:计算机10-3学号: **********学生姓名:***指导教师:**2013年 1月 9 日安徽理工大学课程设计(论文)任务书计算机科学与工程学院计算机科学与技术系2012年 11月 20日安徽理工大学课程设计(论文)成绩评定表摘要操作系统是管理计算机硬件资源,控制其他程序运行并为用户提供交互操作界面的系统软件的集合。
操作系统是计算机系统的关键组成部分,负责管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本任务。
文件管理是操作系统的五大职能之一,主要涉及文件的逻辑组织和物理组织,目录的结构和管理。
所谓文件管理,就是操作系统中实现文件统一管理的一组软件、被管理的文件以及为实施文件管理所需要的一些数据结构的总称(是操作系统中负责存取和管理文件信息的机构)文件管理是操作系统中一项重要的功能。
其重要性在于,在现代计算机系统中,用户的程序和数据,操作系统自身的程序和数据,甚至各种输出输入设备,都是以文件形式出现的。
可以说,尽管文件有多种存储介质可以使用,如硬盘、软盘,光盘,闪存,记忆棒,网盘等等,但是,它们都以文件的形式出现在操作系统的管理者和用户面前。
磁盘管理是一项计算机使用时的常规任务,它是以一组磁盘管理应用程序的形式提供给用户的,主要研究的问题包括磁盘调度的算法,访存时延,调度算法的优劣性和适用场合等等。
关键词:模拟dos文件的建立和使用,索引存贮,链式存贮,磁盘调度目录1 设计目的 (1)2 设计要求 (1)2.1模拟设计DOS操作系统中磁盘文件的存储结构 (1)2.1.1算法分析: (2)2.2模拟设计便于直接存取的索引文件结构 (3)2.2.1算法分析: (4)3 模拟算法的实现 (5)3.1流程图 (5)3.1.1主窗口(main函数) (5)3.1.2直接存取的索引文件结构 (6)3.2程序源代码 (7)3.3运行效果图 (11)总结 (13)参考文献 (14)1 设计目的磁盘文件是磁盘上存储的重要信息,通过本实验模拟DOS文件的建立和使用情况,理解磁盘文件的物理结构。
文件管理是操作系统中重要的内容之一,不同的文件系统提供了不同的物理结构,通过实验,深入理解文件的物理结构与存取方法之间的关系,以便更好的掌握文件系统的概念。
2 设计要求2.1 模拟设计DOS操作系统中磁盘文件的存储结构DOS操作系统对磁盘文件的管理采用链接结构,将所有的链接指针集中在一起,存放在文件分配表(FAT)中。
连接文件的第一个物理块号登记在文件目录中。
其设计思想是:假定磁盘上共有N个物理块可供使用,当要存放文件时,从FAT表中寻找其值为0的项,用其对应的物理块存放文件信息,并把文件占有的各物理块用链接指针登记在FAT表中,再把文件的第一个物理块号登记在文件目录中。
文件目录及FAT表如图所示:图2-1在DOS中FAT表的前两项用来记录磁盘的类型。
而从第2项开始记录磁盘的分配情况和文件各物理块的链接情况。
在FAT表中第三项的值如果为0,表示对应的第三块空闲。
由图还知道文件A的各记录依次存放在第2、第4、第15、第16、第50等六个物理块中。
第50块中的指针为FFF,表示文件A的结束。
文件B的各记录依次存放在第7、第10、第20等三个物理块中。
第20块中的指针为FFF。
假定磁盘存储空间共有100个物理块,设计一个文件分配表。
为了简单,文件分配表可用一个数组定义,其中每一个元素与一个物理块对应。
当第 i 个元素为 0 时,表示第 i 块空闲;当第 i 个元素既不为 0 也不为 FFF 时,其值表示该文件的下一个物理块号。
另外,再设一个空闲块总数变量记录系统还有的空闲块数。
为了简单,假定一个物理块指存放一个逻辑记录,要求设计一个程序,把文件的逻辑记录结构转换成 DOS 的链接结构。
当用户要求将已在主存的文件保存在磁盘上时,给出文件名及文件的记录个数,系统应能在磁盘上正确地保存文件。
或当用户要求给指定文件增加记录时,也应正确的实现,并插在指定记录之后。
为了正确地执行模拟程序,可用键盘模拟输入用户的要求。
输入格式为: write(文件名,记录个数) 或i nsert(文件名,逻辑记录号)2.1.1算法分析:void write(char *tmpname,int tmplength){int last,i,j;strcpy(file[filenumber].name,tmpname);//复制文件名和文件块个数file[filenumber].length=tmplength;for(i=2;i<N;i++){ //存文件if(FAT[i]==0){file[filenumber].start=i;//首个空闲块为文件开始块last=i;FAT[last]=FFF;break;}}for(i=1;i<tmplength;i++){ //last为上个记录的位置for(j=2;j<N;j++)if(FAT[j]==0){FAT[last]=j; last=j;FAT[last]=FFF; break;}}FAT[last]=FFF;//文件末存结束标记freespace-=tmplength;//改变空闲块个数filenumber++;printf("文件名和长度:%s %d\n",tmpname,tmplength);}void insert(char *tmpname,int insertpoint){int i;int last,brpoint;for(i=0;i<filenumber;i++)//寻找要执行插入操作的文件,将其数组下标存入last{if(strcmp(file[i].name,tmpname)==0)//比较插入文件名与已存在文件名是否相同{last=i;break;}}brpoint=file[last].start; //brpoint记录当前文件扫描到的位置for(i=0;i<insertpoint-1;i++){ brpoint=FAT[brpoint]; //扫描直到找到插入位置 }for(i=0;i<N;i++)//寻找一个空闲块插入{ if(FAT[i]==0){ FAT[i]=FAT[brpoint];FAT[brpoint]=i;break;}}file[last].length++; //改变空闲块个数与文件长度freespace--;printf("\t文件名和长度:%s %d\n",tmpname,file[last].length);}2.2 模拟设计便于直接存取的索引文件结构为了便于用户直接存取文件的各个逻辑记录,在 MS-DOS 中通过文件目录,再沿着链查找FAT表,便可直接找到指定逻辑记录对应的物理块。
在小型机或更高级的文件系统中,直接存取文件的方法是为每个文件建立一个索引表,指出各逻辑记录与物理块的对应关系。
最简单的形式是一个逻辑记录对应一个物理块。
文件目录与索引表的关系如图所示。
图2-2通常索引表按照逻辑记录顺序建立,这样既有利于顺序存储,又有利于直接存储。
为了标识哪些记录已经建立,哪些记录还没建立,故在索引表中增设一个标志位。
写文件或插入一个记录的过程是寻找一个空闲物理块,然后将其填入索引表对应项中。
其建立过程同第一题,即 write(文件名,记录号)和 insert (文件名,记录号)。
要求用位示图描绘出磁盘的使用情况,并要求模拟程序执行过程的每一步都能显示文件目录、位示图、索引表。
2.2.1算法分析:void search(char *tmpname){int i;for(i=0;i<filenumber;i++){if(strcmp(file[i].name,tmpname)==0)//比较插入文件名与已存在文件名是否相同{printf("\t找到了!\n");printf("\t文件名起始块号文件长度\n");printf(" %s %d %d\n",file[i].name,file[i].start,file[i].length);}}}void search2(int searchpoint){ int i; int m;if(FAT[searchpoint]==0)printf("\t该点空缺,没有文件!");elseif(FAT[searchpoint]==-1&&FAT[searchpoint-1]==-2||FAT[searchpoint]==-2&&FAT[searchpoint +1]==-1){ printf("\t此处为系统空间!"); }else if(FAT[searchpoint]==-1&&FAT[searchpoint+1]==0){ printf("\t找到了!此处的文件名为:%s",file[i].name); }else if(FAT[searchpoint]!=0&&FAT[searchpoint+1]!=-1){for(m=searchpoint;;m++){if(FAT[m]==-1)printf("\t找到了!此处的文件名为:%s",file[i].name);break;}}else if(FAT[searchpoint]!=0&&FAT[searchpoint+1]==-1){printf("找到了!此处的文件名为:%s",file[i].name);}}3 模拟算法的实现3.1流程图3.1.1主窗口(main函数)3.1.2直接存取的索引文件结构3.2程序源代码#include<string.h>#include<conio.h>#include<stdio.h>#include<stdlib.h>const int FDF=-2;const int FFF=-1;const int N=100;//存储空间(FAT表长度)int filenumber;//文件数量struct FILEINFO{char name[10];int start;int length;};FILEINFO file[10];int FAT[N],freespace; //FAT表和剩余空间void printfmenu(){int i;printf("\t文件个数:%d \n",filenumber);printf("\t文件名起始块号文件长度\n");for(i=0;i<filenumber;i++){printf(" %s %d %d\n",file[i].name,file[i].start,file[i].length);}}void printFAT(){int i;printf("\t空闲块数:%d\n",freespace);printf("\t-2代表FDF,-1代表FFF\n");for(i=0;i<N;i++){printf(" No.%d %d\n",i,FAT[i]);}}void search(char *tmpname){int i;for(i=0;i<filenumber;i++){if(strcmp(file[i].name,tmpname)==0)//比较插入文件名与已存在文件名是否相同{printf("\t找到了!\n");printf("\t文件名起始块号文件长度\n");printf(" %s %d %d\n",file[i].name,file[i].start,file[i].length);}}}void search2(int searchpoint){int i;int m;if(FAT[searchpoint]==0)printf("\t该点空缺,没有文件!");elseif(FAT[searchpoint]==-1&&FAT[searchpoint-1]==-2||FAT[searchpoint]==-2&&FAT[searchpoint+ 1]==-1){printf("\t此处为系统空间!");}else if(FAT[searchpoint]==-1&&FAT[searchpoint+1]==0){printf("\t找到了!此处的文件名为:%s",file[i].name);}elseif(FAT[searchpoint]!=0&&FAT[searchpoint+1]!=-1){for(m=searchpoint;;m++){if(FAT[m]==-1)printf("\t找到了!此处的文件名为:%s",file[i].name);break;}}else if(FAT[searchpoint]!=0&&FAT[searchpoint+1]==-1){printf("找到了!此处的文件名为:%s",file[i].name);}}void write(char *tmpname,int tmplength){int last,i,j;strcpy(file[filenumber].name,tmpname);//复制文件名和文件块个数file[filenumber].length=tmplength;for(i=2;i<N;i++){ //存文件if(FAT[i]==0){file[filenumber].start=i;//首个空闲块为文件开始块last=i;FAT[last]=FFF;break;}}for(i=1;i<tmplength;i++){ //last为上个记录的位置for(j=2;j<N;j++)if(FAT[j]==0){FAT[last]=j;last=j;FAT[last]=FFF;break;}}FAT[last]=FFF;//文件末存结束标记freespace-=tmplength;//改变空闲块个数filenumber++;printf("文件名和长度:%s %d\n",tmpname,tmplength);}void insert(char *tmpname,int insertpoint){int i;int last,brpoint;for(i=0;i<filenumber;i++)//寻找要执行插入操作的文件,将其数组下标存入last {if(strcmp(file[i].name,tmpname)==0)//比较插入文件名与已存在文件名是否相同{last=i;break;}}brpoint=file[last].start; //brpoint记录当前文件扫描到的位置for(i=0;i<insertpoint-1;i++){brpoint=FAT[brpoint]; //扫描直到找到插入位置}for(i=0;i<N;i++)//寻找一个空闲块插入{if(FAT[i]==0){FAT[i]=FAT[brpoint];FAT[brpoint]=i;break;}}file[last].length++; //改变空闲块个数与文件长度freespace--;printf("\t文件名和长度:%s %d\n",tmpname,file[last].length);}int main(){int i;char tmpname[10];int tmplength;//要写入文件长度int m;//命令filenumber=0;for(i=0;i<N;i++){ //初始化FAT表FAT[i]=0;}FAT[0]=FDF;FAT[1]=FFF;//FAT[3]=999;freespace=98;while(true){printf("\n");printf("*********************************************************\n");printf(" ****欢迎进入**** \n");printf(" \n");printf(" <<<< 模拟DOS文件的建立和使用>>>> \n");printf(" 0.退出\n");printf(" 1.写入文件 2.插入文件 3.显示文件目录\n");printf(" 4.显示FAT表 5.搜索文件 6.搜索索引点\n");printf("*********************************************************\n");printf("\n");printf("\t选择服务菜单:");scanf("%d",&m);switch(m){case 0: exit(0);case 1: printf("\t输入要写入的文件名:");scanf("%s",&tmpname);printf("\t输入要写入的文件长度:");scanf("%d",&tmplength);write(tmpname,tmplength);break;case 2: printf("\t输入要插入的文件名:");scanf("%s",&tmpname);int insertpoint;printf("\t输入要插入的点:");scanf("%d",&insertpoint);insert(tmpname,insertpoint);break;case 3: printfmenu();break;case 4: printFAT();break;case 5: printf("\t请输入要搜索的文件名:");scanf("%s",&tmpname);search(tmpname);break;case 6: printf("\t请输入要搜索的索引点:");int searchpoint;scanf("%d",&searchpoint);search2(searchpoint);break;}}printFAT();}3.3运行效果图A、模拟设计DOS操作系统中磁盘文件的存储结构运行结果B、FAT()列表C、模拟设计便于直接存取的索引文件结构运行效果总结通过本次的课程设计学习对dos文件的管理系统有了初步的了解。