模拟文件系统

合集下载

IMEX介绍

IMEX介绍

IMEX的介绍简介IMEX是一个考虑重力及毛细管力的三相黑油模拟软件,网络系统可采用直角坐标,径向坐标,变深度/变厚度坐标,在任何网络系统中,都可建立两维或三维模型,在处理气相的出现及消失情况时,程序采用了变量替换法。

IMEX的一些特征和功能为:自适应隐式方法IMEX可以在显示,在隐式以及自适应隐式三种方式下运行,在大多数情况下,只有很少一部分网格需要采用全隐式求解,而大部分网格都可采用显式方法求解,自适应隐式方法正是适合于这种情况的解法,并且在井附近以及层状油藏的薄层中,开采时会产生高速流协的锥进问题,采用自适应隐式处理这类问题是很有效的。

采用自适应隐式选项可节省三分之一到一半的运行时间。

计算时可采用和全隐式方法同样大的时间步长。

用户可以指定采用全隐式方法计算的网格,可根据用户确定的界限或矩阵转换临界值,动态地选择采用全隐式计算的网络网格。

双孔/双渗双孔隙度选项允许采用两种方法对基岩模型进行离散化处理,其中一种为嵌套格式,或为“多重内部作用连续”(MINC)方法,另一咱为层状格式,称作“子区城”方法。

双孔隙模型对裂缝油藏进行了理想化的近似处理,认为裂隙油藏由两部分组成:主要孔隙度和次要孔隙度。

主要孔隙度(基岩)代表岩块中的微小粒间孔隙,次要孔隙度(裂缝)由裂缝,通道溶洞级成。

双孔隙模型将油藏分为两个连续域,裂隙是流体流动的主要通道,只具有很小的储集性能;而基岩具有较低的流体传导能力,但具有较大的储存能力。

使用单个基岩岩块/一个裂缝系统就可确定一个简单的双孔模型。

形状因子的计算基于Waarren 和Gilman 和Kszwmi的工作。

在这种情况下,假设基岩和裂缝是在半稳定流状态下进行传输的。

为了恰当地表示基岩与裂缝间的传导机理,有必要将基岩进一步划分为较小的体积单元。

MINC法通过将基岩划分成一系列嵌套的体积单元来达到这种目的,离散化时基于这样一种假设,即体积单元表面为等势面,通过一个裂缝网格时,主要变量的变化很小。

操作系统文件管理系统模拟实验

操作系统文件管理系统模拟实验

文件管理系统模拟1.实验目的通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现 2.实验内容为Linux 系统设计一个简单的二级文件系统。

要求做到以下几点: (1)可以实现下列几条命令(至少4条) login 用户登录 dir列文件目录create 创建文件 delete 删除文件open 打开文件 close 关闭文件 read 读文件 write写文件(2)列目录时要列出文件名、物理地址、保护码和文件长度; (3)源文件可以进行读写保护。

3.实验提示(1)首先应确定文件系统的数据结构:主目录、子目录及活动文件等。

主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改.(2)用户创建的文件,可以编号存储于磁盘上。

入file0,file1,file2…并以编号作为物理地址,在目录中进行登记。

4.源代码#include<stdio 。

h> #include 〈string.h 〉 #include 〈stdlib 。

h 〉 #define MEM_D_SIZE 1024*1024 //总磁盘空间为1M #define DISKSIZE 1024 //磁盘块的大小1K #define DISK_NUM 1024 //磁盘块数目1K #define FATSIZE DISK_NUM*sizeof (struct fatitem ) //FAT 表大小 #define ROOT_DISK_NO FATSIZE/DISKSIZE+1 //根目录起始盘块号 #define ROOT_DISK_SIZE sizeof (struct direct ) //根目录大小 #define DIR_MAXSIZE 1024 //路径最大长度为1KB #define MSD 5 //最大子目录数5#define MOFN 5//最大文件深度为5#define MAX_WRITE 1024*128//最大写入文字长度128KBstruct fatitem /* size 8*/{int item; /*存放文件下一个磁盘的指针*/char em_disk; /*磁盘块是否空闲标志位 0 空闲*/};struct direct{/*--——-文件控制快信息-—---*/struct FCB{char name[9]; /*文件/目录名 8位*/char property; /*属性 1位目录 0位普通文件*/int size; /*文件/目录字节数、盘块数)*/int firstdisk; /*文件/目录起始盘块号*/int next; /*子目录起始盘块号*/int sign; /*1是根目录 0不是根目录*/}directitem[MSD+2];};struct opentable{struct openttableitem{char name[9]; /*文件名*/int firstdisk; /*起始盘块号*/int size; /*文件的大小*/ }openitem[MOFN];int cur_size; /*当前打文件的数目*/};struct fatitem *fat; /*FAT表*/struct direct *root; /*根目录*/struct direct *cur_dir; /*当前目录*/struct opentable u_opentable; /*文件打开表*/int fd=—1; /*文件打开表的序号*/char *bufferdir; /*记录当前路径的名称*/char *fdisk; /*虚拟磁盘起始地址*/void initfile();void format();void enter();void halt();int create(char *name);int open(char *name);int close(char *name);int write(int fd,char *buf,int len);int read(int fd,char *buf);int del(char *name);int mkdir(char *name);int rmdir(char *name);void dir();int cd(char *name);void print();void show();void initfile(){fdisk = (char *)malloc(MEM_D_SIZE*sizeof (char)); /*申请 1M空间*/format();}void format(){int i;FILE *fp;fat = (struct fatitem *)(fdisk+DISKSIZE); /*计算FAT 表地址,引导区向后偏移 1k)*/ /*————-初始化FAT表-———---——-—-*/fat[0]。

模拟UNIX文件系统的设计及实现操作系统大作业

模拟UNIX文件系统的设计及实现操作系统大作业

模拟UNIX文件系统的设计及实现操作系统大作业UNIX文件系统是一种常见的操作系统文件系统,它提供了一种以层次结构组织文件和目录的方式来管理存储设备上的数据。

为了完成这个大作业,我们需要设计并实现一个简化版的UNIX文件系统,包括文件和目录的管理、文件的读写操作、文件权限的管理等。

首先,我们需要设计文件系统的存储结构。

文件系统可以在硬盘上以一个分区的形式存在,我们可以使用一个整数数组来表示硬盘,每个数组元素表示硬盘上的一个块。

我们还可以使用一个超级块来记录文件系统的信息,例如文件系统的状态、块的总数、块的使用情况等。

此外,我们还需要设计并实现一个索引节点表,用于保存文件或目录的元数据信息,例如文件的大小、权限、创建时间等。

接下来,我们需要实现文件和目录的管理功能。

文件和目录可以通过其在索引节点表中的索引来标识。

我们可以使用一个数组来表示目录,数组的每个元素都是一个目录项,记录了文件或子目录的名字和索引节点的索引。

我们还可以使用一个栈来保存当前目录的路径,方便用户在不同目录之间切换。

为了支持目录的嵌套,我们可以在目录项中添加一个指向父目录的索引。

在文件和目录的管理基础上,我们还需要实现文件的读写操作。

文件可以通过其索引节点的索引来标识。

当用户要读取文件时,我们需要根据文件的索引节点找到文件的块地址列表,然后将列表中的块读取到内存中。

当用户要写入文件时,我们需要找到文件的块地址列表中最后一个块,如果该块已满,则需要申请一个新的块,并将新块的地址添加到块地址列表中。

同时,我们还需要更新文件的大小和修改时间等元数据信息。

最后,我们还需要实现文件权限的管理功能。

文件的权限信息可以通过文件的索引节点来保存。

我们可以使用一个整数来表示文件的权限,例如八进制数,每一位代表一个权限,例如读取权限、写入权限和执行权限等。

当用户要访问文件时,我们需要根据用户的权限和文件的权限来判断用户是否具有相应的权限。

总结起来,要完成这个大作业,我们需要设计并实现一个模拟UNIX文件系统,包括文件和目录的管理、文件的读写操作、文件权限的管理等。

操作系统课程设计-模拟一个简单二级文件管理系统

操作系统课程设计-模拟一个简单二级文件管理系统

模拟一个简单二级文件管理系统设计目的:通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。

设计内容:模拟一个简单二级文件管理系统一、实验内容描述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");}}运行结果视图:(略)。

基于安卓平台的程序设计:模拟器、DDMS 和ADB

基于安卓平台的程序设计:模拟器、DDMS 和ADB

DDMS
程序运行后可以检控多个Android模拟器,显示每个模拟器中所以正
在运行的进程 提供屏幕截图功能
DDMS
DDMS中的模拟器控制器
控制Android模拟器的 网络速度和延迟,模拟 语音和SMS短信通信
网络速率:GSM、 HSCSD、PRS、EDGE 、MTS、DPA和全速 率
网络延迟:GPRS、 EDGE、UMTS和无延 迟
GPS的位置
DDMS
DDMS中的文件浏览器 上传、下载和删除Android内置存储器上的文件 显示文件和目录的名称、权限、建立时间等
DDMS
日志浏览器
浏览Android系统、Dalvik虚拟机或应用程序产生的日 志信息,有助于快速定位应用程序产生的错误
以图形化的方式显示应用程 序的执行日志,用来调试应 用程序,分析执行效率 建立SD卡的映像文件
NinePatch 是 Android 提 供 的 可伸缩的图形文件格式,基 于 PNG 文 件 。 draw9patch 工 具 可 以 使 用 WYSIWYG 编 辑 器建立NinePatch文件
打包工具 层级观察器
启动文件 sqlite3.exe
apkbuilder.bat hierarchyviewer.bat
跟踪显示工具 traceview.bat
SD卡映像创建 mksdcard.exe 工具
NinePatch 文 draw9patch.bat 件编辑工具
说明 用 来 创 建 和 管 理 SQLite 数 据 库 将应用程序打包成apk文件 对用户界面进行分析和调试, 以图形化的方式展示树形结 构的界面布局
DDMS(P15)
DDMS
Android系统中内置的调试工具 监视Android系统中进程、堆栈信息,查看logcat日志,实

UEFI 虚拟环境的建立

UEFI  虚拟环境的建立

UEFI 虚拟环境的建立UEFI虚拟环境主要有两种:一种是建立于操作系统之上的,类似一个应用程序的虚拟环境(称为:Nt32),该虚拟环境是无法加载光盘efi文件启动的。

另一种是运行于过去的BIOS之上的虚拟环境(DUET),此种虚拟环境更接近于实际的UEFI环境,可以加载光盘efi文件启动。

一、首先介绍第一种UEFI虚拟环境(Nt32)的建立方法:1、系统需求Microsoft Windows 2000/XP/2003256MB+ 系统内存500MB+ 硬盘空间Visual Studio .NET 2003 or 2005 Professional(Visual Studio 2008与Visual Studio 2005的使用方法相同)2、解压EDK(EFI_DEVELOP_KIT)包。

先从https:///servlets/ProjectDocumentList官方网页中下载最新EDK 的相关源码包。

并解压,默认的解压文件夹为:C:\Fw\Edk3、建立Nt32模拟环境使用Visual Studio 命令行模式作为编译环境。

并在命令行中输入VcVars32命令,即建立使用Visual Studio x86 工具的编译环境。

如下图:图1.1 建立编译环境然后在命令行中输入:cd C:\FW\Edk\Sample\Platform\Nt32\Build若是使用VS2005或者VS2008则需要修改该文件夹下的Config.env文件。

可以用记事本打开,将Set USE_VC8 = NO改为:Set USE_VC8 = YES接下来就可以开始编译和建立NT32模拟环境了。

输入命令如下:set EDK_SOURCE=C:\FW\EDKcd C:\FW\Edk\Sample\Platform\Nt32\build接下来就是等待Nt32模拟环境建立完成。

4、使用Nt32模拟环境首先设置环境变量,可以直接运行System.cmd来自动设置环境变量,也可以手动修改。

Linux应用基础模拟试题2(附答案)

Linux应用基础模拟试题2(附答案)

Linux应用基础模拟试题2(附答案)Linux应用基础模拟试题二一、单项选择题(每小题分,共40题,计60分)BCDBD CAAAC DAADD BBCDA BBDBA CBADC DABAC ABBDB1、ldconfig的配置文件是( B )。

A、/lib/lD、soB、/etc/LD、C、/etc/lD、D、/etc/2、下面哪个命令可以压缩部分文件( C )。

A、tar -dzvf *B、tar -tzvf *C、tar -czvf *D、tar -xzvf *3、网络服务的daemon是( D )。

A、lpdB、netdC、httpdD、inetd4、Linux与windows 95的网上领居互联,需要提供什么daemon( B )A、bindB、smbdC、nmbdD、shard5、对于Apache服务器,提供的子进程的缺省的用户是( D )。

A、rootB、apachedC、httpdD、nobody6、sendmail中缺省的未发出信件的存放位置是( C )。

A、/var/mail/B、/var/spool/mail/C、/var/spool/mqueue/D、/var/mail/deliver/7、apache的主配置文件是( A )。

A、httpD、confB、httpD、cfgC、D、8、关于可装载的模块,装载时的参数,如I/O地址等的存放位置是( A )。

A、/etc/B、/etc/C、/boot/D、/etc/sysconfig9、在Linux 中,如何关闭邮件提示( A )A、biff nB、mesg nC、notify offD、set notify=off10、在bash shell 环境下,当一命令正在执行时,按下control-Z 会( C )。

A、中止前台任务B、给当前文件加上EOF.C、将前台任务转入后台D、注销当前用户11、定义bash环境的用户文件是( D )。

模拟简单二级文件管理系统

模拟简单二级文件管理系统

模拟简单二级文件管理系统简单二级文件管理系统是一种用于管理和组织计算机文件的软件系统。

它提供了一种方便的方式来浏览、创建、修改和删除文件,以及对文件进行分类和搜索。

本文将介绍如何设计和实现一个模拟简单二级文件管理系统。

一、系统概述模拟简单二级文件管理系统是一个基于命令行界面的文件管理系统。

用户可以通过输入不同的命令来执行文件管理操作,如创建文件夹、创建文件、查看文件列表、移动文件等。

系统支持两级文件结构,即可以在根目录下创建文件夹,并在文件夹下创建文件。

系统还提供了文件搜索功能,用户可以根据文件名或文件类型进行搜索。

二、系统功能1. 创建文件夹:用户可以通过输入命令,在指定路径下创建一个新的文件夹。

2. 创建文件:用户可以通过输入命令,在指定路径下创建一个新的文件。

3. 查看文件列表:用户可以通过输入命令,查看指定路径下的文件夹和文件列表。

4. 移动文件:用户可以通过输入命令,将指定文件或文件夹移动到目标路径下。

5. 复制文件:用户可以通过输入命令,将指定文件或文件夹复制到目标路径下。

6. 删除文件或文件夹:用户可以通过输入命令,删除指定的文件或文件夹。

7. 文件搜索:用户可以通过输入命令,根据文件名或文件类型进行文件搜索。

三、系统设计1. 数据结构系统使用树状结构来表示文件系统,每个节点表示一个文件夹或文件。

节点包含以下属性:- 名称:节点的名称,可以是文件夹名称或文件名称。

- 类型:节点的类型,可以是文件夹或文件。

- 父节点:指向父节点的指针,用于表示文件夹的层次结构。

- 子节点列表:包含子节点的列表,用于表示文件夹下的文件和文件夹。

2. 系统流程系统的主要流程如下:- 用户输入命令。

- 系统解析命令,判断执行的操作类型。

- 根据操作类型,执行相应的操作。

- 更新文件系统的数据结构。

- 返回执行结果给用户。

四、系统实现系统可以使用编程语言来实现,如Python。

以下是一个简单的实现示例:```pythonclass Node:def __init__(self, name, type): = nameself.type = typeself.parent = Noneself.children = []class FileSystem:def __init__(self):self.root = Node("root", "folder")def create_folder(self, path, name):# 创建文件夹的逻辑def create_file(self, path, name):# 创建文件的逻辑def list_files(self, path):# 查看文件列表的逻辑def move_file(self, source_path, target_path): # 移动文件的逻辑def copy_file(self, source_path, target_path): # 复制文件的逻辑def delete_file(self, path):# 删除文件的逻辑def search_file(self, path, keyword):# 文件搜索的逻辑# 创建文件系统对象file_system = FileSystem()# 用户输入命令command = input("请输入命令:")# 解析命令并执行相应的操作# ...# 更新文件系统的数据结构# ...# 返回执行结果给用户# ...```以上是一个简单的模拟二级文件管理系统的设计和实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计课程名称计算机操作系统题目名称模拟文件系统专业班级2014级计算机科学与技术(专升本)班学生姓名宋欢乐、张焕、范孝礼学号51402111042、51402111038、51402111043 指导教师邹青青二○一四年十二月二十日目录1、引言 (2)2、需求分析 (3)3、概要设计 (4)3.1 系统的主要功能 (4)(1) 主界面 (4)(2) Create 建立文件 (5)(3)Read 读取文件 (6)(4)Write 写入文件 (7)(5)Delete 删除文件 (9)(6)Mkdir 建立目录 (10)(7)Cd 切换目录 (11)(8)Logout 退出登录 (12)3.2 系统模块功能结构 (12)(1)结构说明: (12)3.3 运行环境要求 (13)3.4 数据结构设计 (13)3.5 数据结构说明 (14)(1)文件结构链表 (14)(2)函数介绍 (14)4、详细设计 (15)4.1 模块设计 (15)4.2 算法流程图 (15)5、系统源代码 (17)见附录 (17)6、系统测试及调试 (18)6.1 运行结果及分析 (18)6.2 系统测试结论 (22)7、总结与体会 (23)参考文献 (24)附录系统的主要源代码 (25)1、引言计算机操作系统是计算机系统中不可缺少的基本系统软件,计算机操作系统是由硬件和软件两部分构成的。

操作系统实际上是一个计算机系统中硬、软件资源的总指挥部。

能有效的组织和管理计算机系统中的硬件和软件资源、合理的组织计算机工作流程,控制程序的执行、并向用户提供各种服务功能,使得用户能够合理、方便、有效的使用计算机,是整个计算机系统能高效运行的一组程序模块的集合。

操作系统在计算机体系中张非常重要的地位。

在现代计算机管理中,总是把程序和数据以文件的形式存储在磁盘和磁带上,供所有的或指定的用户使用。

为此,在操作系统中必须配置文件管理机构。

文件管理的主要任务是对任务和系统文件进行管理,以方便用户使用,并保证文件的安全性。

为此,文件管理应具有对文件存储空间的管理、目录管理、文件的读写管理,以及文件的共享与保护等功能。

从计算机诞生到现在虽然只经历了短短几十年的时间,但无论是在软件还是在硬件方面,计算机都有着飞跃式的发展。

随着计算机应用不断增加,计算机上所需要存储的数据和程序也日益增多,早期的文件管理方式已经不能满足现在的需要。

计算机操作系统是配置在计算机硬件上的第一层软件,是对硬件的首次扩充。

他在计算机系统中占据了特别重要的地位。

操作系统的主要功能是进行处理机管理功能,为了进一步了解文件管理功能,我们建立了一个文件模拟系统,要求编写程序,模拟实现文件系统中关于目录及文件的操作。

2、需求分析该模拟文件系统包括目录文件(简称目录)、普通文件(简称文件),并实现下面一些基本功能:1.创建目录:mkdir 〈目录名〉,再指定路径下创建指定的目录,或者在没有指定路径时,在当前目录下创建子目录。

2.改变目录:cd 〈目录名〉,工作目录转到指定的目录下。

cd .. 返回根目录下3.创建文件:create 〈文件名〉,创建一个指定名字的新文件,即在目录中增加一项,不考虑文件的内容。

4.写入文件:Write 〈文件名〉,把需要写入的数据,写入文件之中。

5.读取(显示)文件:Read 〈文件名〉,把文件的数据,打印在屏幕上。

6.删除文件:delete 〈文件名〉,删除指定的文件。

6.获得命令帮助 HELP7.退出文件系统 LOGOUT 要考虑的特殊情况:1)各个命令对全路径和相对路径的支持A.目录不存在时,给出错误信息B.不能用cd 进入文件C.相对路径的解析D.路径中的空格剔除2)删除目录或文件时的问题A.删除不存在的文件或目录,给出错误提示B.删除目录时目录不为空; 如果该目录为空,则可删除,否则给出是否做删除,删除操作将该目录下的全部文件和子目录都删除C.进入到某个目录下,却要删除本目录或者上级目录3、概要设计3.1 系统的主要功能此文件模拟系统主要是模拟有关目录和文件的创建等操作,具体如下:(1)主界面主界面的设计主要包含整形的main()函数,在函数体中通过调用while循环语句来实现用户只能验证三次用户名和密码限制,以及对其他模块(帮助命令等)的调用。

int main() //主函数main(){int i=0;bool in=false;char users[8],pwd[12];cout<<"|-----------------------------------------------------------------|"<<endl;cout<<"| 模拟Linux文件系统|"<<endl;cout<<"| 账号:usr1-usr8 密码:usr1-usr8 |"<<endl;cout<<"| 你只有三次机会来试验账号|"<<endl;cout<<"|_________________________________________|"<<endl;cout<<endl;while(i<3) //限制用户的用户名和密码的验证次数{cout<<"Login:";cin>>users;cout<<"Pass:";cin>>pwd;if(chklogin(users,pwd)){in=true;break;}i++;}help(); //调用帮助函数,以便用户命令的使用createroot();while(in){if(!run())break;}}登录模块中包含了8个默认用户名和密码,且用户在登录时只有三次登录机会,登录不成功则自动退出系统。

users usrarray[8] ={"usr1","usr1", //用户名:usr1,密码:usr1"usr2","usr2", //用户名:usr2,密码:usr2"usr3","usr3", //用户名:usr3,密码:usr3"usr4","usr4", //用户名:usr4,密码:usr4"usr5","usr5", //用户名:usr5,密码:usr5"usr6","usr6", //用户名:usr6,密码:usr6"usr7","usr7", //用户名:usr7,密码:usr7"usr8","usr8", //用户名:usr8,密码:usr8};(2)Create 建立文件文件的建立主要是使用整形函数create()函数来实现的,具体如下:int create() //定义一个创建文件的整形函数create(){temp=initfile(" ",0);cin>>temp->filename; //输入文件名cin>>temp->content; //输入内容if(recent->child==NULL){temp->parent=recent;temp->child=NULL;recent->child=temp;temp->prev=temp->next=NULL;cout<<"文件建立成功!"<<endl; //文件创建成功}else{ttemp=recent->child;while(ttemp->next){ttemp=ttemp->next;if(strcmp(ttemp->filename,temp->filename)==0&& //判断子目录是否存在ttemp->isdir==0){printf("对不起,文件已存在!"); //输出文件已经存在return 1;}}ttemp->next=temp;temp->parent=NULL;temp->child=NULL;temp->prev=ttemp;temp->next=NULL;cout<<"文件建立成功!"<<endl; //文件创建成功}return 1;}(3)Read 读取文件文件的读取主要是使用整形函数read()函数来实现的,具体如下:int read() //定义一个文件读取的整形函数read(){char filename[FILENAME_LENGTH];cin>>filename;if(recent->child==NULL) //判断文件是否存在{cout<<"文件不存在!"<<endl; //文件不存在return 1;}if(strcmp(recent->child->filename,filename)==0) //读取文件{cout<<recent->child->content<<endl;return 1;}else{temp=recent->child;while(temp->next){if(strcmp(temp->next->filename,filename)==0){cout<<temp->next->content<<endl;return 1;}}cout<<"文件不存在!"<<endl;}}(4)Write 写入文件文件的写入主要是使用整形函数write()函数来实现的,具体如下:int write() //定义一个文件写入的整形函数write(){char filename[FILENAME_LENGTH];cin>>filename;if(recent->child==NULL){cout<<"文件不存在!"<<endl;return 1;}if(strcmp(recent->child->filename,filename)==0){recent->child->isopen=1;//设置文件标记为打开cin>>recent->child->content;recent->child->isopen=0;//设置文件标记为关闭cout<<"文件写入成功!"<<endl;return 1;}else{temp=recent->child;while(temp->next){if(strcmp(temp->next->filename,filename)==0){recent->child->isopen=1;//设置文件标记为打开cin>>temp->next->content;recent->child->isopen=0;//设置文件标记为关闭cout<<"文件写入成功!"<<endl;return 1;}}cout<<"文件不存在!"<<endl;}}}(5)Delete 删除文件文件的删除主要是使用整形函数del()函数来实现的,具体如下:int del() //定义一个文件删除的整形函数del(){char filename[FILENAME_LENGTH];cin>>filename;temp=new fnode;if(recent->child){temp=recent->child;while(temp->next && (strcmp(temp->filename,filename)!=0 ||temp->isdir!=0))temp=temp->next;if(strcmp(temp->filename,filename)!=0) //判断文件是否存在{cout<<"不存在该文件!"<<endl;return 0;}}else{cout<<"不存在该文件!"<<endl;return 0;}if(temp->parent==NULL){temp->prev->next=temp->next;if(temp->next)temp->next->prev=temp->prev;temp->prev=temp->next=NULL;}else{if(temp->next)temp->next->parent=temp->parent;temp->parent->child=temp->next;}delete temp;cout<<"文件已删除!"<<endl;}(6)Mkdir 建立目录目录的建立主要是使用整形函数write()函数来实现的,具体如下:int mkdir() //定义一个目录创建的整形函数mkdir(){temp=initfile(" ",1);cin>>temp->filename;if(recent->child==NULL){temp->parent=recent;temp->child=NULL;recent->child=temp;temp->prev=temp->next=NULL;}else{ttemp=recent->child;while(ttemp->next){ttemp=ttemp->next;if(strcmp(ttemp->filename,temp->filename)==0&&ttemp->isdir==1){printf("对不起,目录已存在!");return 1;}}ttemp->next=temp;temp->parent=NULL;temp->child=NULL;temp->prev=ttemp;temp->next=NULL;}return 1;}(7)Cd 切换目录目录的切换主要是使用整形函数cd()函数来实现的,具体如下:int cd() //定义一个目录切换的整形函数cd(){char topara[PARA_LENGTH];cin>>topara;If(strcmp(topara,"..")==0){int i;while(recent->prev)recent=recent->prev;if(recent->parent){recent=recent->parent;}i=strlen(para);while(para[i]!='/' && i>0) i--;if(i!=0)para[i]='\0';elsepara[i+1]='\0';}else{findpara(topara);}return 1;}(8)Logout 退出登录当用户执行完自己的操作或任务时,输入logout即可退出系统。

相关文档
最新文档