模拟文件系统
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文件系统,包括文件和目录的管理、文件的读写操作、文件权限的管理等。
操作系统课程设计-模拟一个简单二级文件管理系统
模拟一个简单二级文件管理系统设计目的:通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。
设计内容:模拟一个简单二级文件管理系统一、实验内容描述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
程序运行后可以检控多个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虚拟环境主要有两种:一种是建立于操作系统之上的,类似一个应用程序的虚拟环境(称为: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应用基础模拟试题二一、单项选择题(每小题分,共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("请输入命令:")# 解析命令并执行相应的操作# ...# 更新文件系统的数据结构# ...# 返回执行结果给用户# ...```以上是一个简单的模拟二级文件管理系统的设计和实现。
操作系统课程设计模拟DOS文件的建立与使用
课程设计说明书题目: 模拟DOS文件的建立与使用院系:计算机科学与工程专业班级:计算机10-3学号: 91学生姓名:张杨杨指导教师:王琳2013年 1月 9 日安徽理工大学课程设计(论文)任务书计算机科学与工程学院计算机科学与技术系2012年 11月 20日安徽理工大学课程设计(论文)成绩评定表摘要操作系统是管理计算机硬件资源,控制其他程序运行并为用户提供交互操作界面的系统软件的集合。
操作系统是计算机系统的关键组成部分,负责管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本任务。
文件管理是操作系统的五大职能之一,主要涉及文件的逻辑组织和物理组织,目录的结构和管理。
所谓文件管理,就是操作系统中实现文件统一管理的一组软件、被管理的文件以及为实施文件管理所需要的一些数据结构的总称(是操作系统中负责存取和管理文件信息的机构)文件管理是操作系统中一项重要的功能。
其重要性在于,在现代计算机系统中,用户的程序和数据,操作系统自身的程序和数据,甚至各种输出输入设备,都是以文件形式出现的。
可以说,尽管文件有多种存储介质可以使用,如硬盘、软盘,光盘,闪存,记忆棒,网盘等等,但是,它们都以文件的形式出现在操作系统的管理者和用户面前。
磁盘管理是一项计算机使用时的常规任务,它是以一组磁盘管理应用程序的形式提供给用户的,主要研究的问题包括磁盘调度的算法,访存时延,调度算法的优劣性和适用场合等等。
关键词:模拟dos文件的建立和使用,索引存贮,链式存贮,磁盘调度目录1 设计目的 (1)2 设计要求 (1)模拟设计DOS操作系统中磁盘文件的存储结构 (1)算法分析: (2)模拟设计便于直接存取的索引文件结构 (3)算法分析: (4)3 模拟算法的实现 (5)流程图 (5)主窗口(main函数) (5)直接存取的索引文件结构 (6)程序源代码 (7)运行效果图 (12)总结 (14)参考文献 (15)1 设计目的磁盘文件是磁盘上存储的重要信息,通过本实验模拟DOS文件的建立和使用情况,理解磁盘文件的物理结构。
模拟文件系统的设计与实现
删除文件:delete创建子目录:mkdir删除子目录:rmdir
列出文件目录:dir退出:exit
系统执行流程图
3.详细设计
主要数据结构:
#define MEM_D_SIZE 1024*1024 ame,name))
break;
}
if(j<MSD+2) /*文件已经存在*/
模拟二级文件管理系统的课程设计目的是通过研究Linux的文件系统结构,模拟设计一个简单的二级文件系统,第一级为主目录文件,第二级为用户文件。
2总体设计
结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统。
文件的创建:create文件关闭:close文件的打开:open
strcpy(cur_dir->directitem[i].name,name);
cur_dir->directitem[i].firstdisk = j;
cur_dir->directitem[i].size = 0;
cur_dir->directitem[i].next = j;
cur_dir->directitem[i].property = '0';
char Space = 32;
char Endter= '\n';
for(i=0;i<len;i++)
{
if(buf[i] == '$')
buf[i] = Space;
else if(buf[i] == '#')
buf[i] = Endter;
操作系统试验模拟文件管理系统
操作系统试验摹拟文件管理系统一、引言文件管理是操作系统中的重要组成部份,它负责对计算机中的文件进行组织、存储和访问。
摹拟文件管理系统是为了更好地理解文件管理的原理和实现方式而设计的一个实验项目。
本文将详细介绍摹拟文件管理系统的设计和实现。
二、设计目标1. 实现基本的文件管理功能,包括文件的创建、删除、打开和关闭。
2. 实现文件的读写操作,包括顺序读写和随机读写。
3. 实现文件的共享和保护机制,确保多个进程可以同时对同一个文件进行读写操作。
4. 实现文件的索引和目录结构,方便文件的查找和管理。
5. 实现文件的存储管理,包括空暇空间管理和磁盘分配算法。
三、系统设计1. 文件的创建和删除在摹拟文件管理系统中,可以通过命令行或者图形界面来创建和删除文件。
创建文件时,系统会为该文件分配一个惟一的文件标识符,并在文件目录中记录该文件的相关信息。
删除文件时,系统会释放该文件占用的存储空间,并从文件目录中删除该文件的记录。
2. 文件的打开和关闭在摹拟文件管理系统中,可以通过命令行或者图形界面来打开和关闭文件。
打开文件时,系统会根据文件标识符在文件目录中查找该文件的相关信息,并将该文件的描述符返回给用户进程。
关闭文件时,系统会释放该文件的描述符,并更新文件的相关信息。
3. 文件的读写操作在摹拟文件管理系统中,可以通过命令行或者图形界面来进行文件的读写操作。
顺序读写是指按照文件的存储顺序挨次读取或者写入文件的内容,而随机读写是指根据文件的索引或者偏移量来读取或者写入文件的内容。
系统会根据用户进程的读写请求,将相应的数据从磁盘中读取或者写入到内存中。
4. 文件的共享和保护机制在摹拟文件管理系统中,多个进程可以同时对同一个文件进行读写操作。
系统会通过锁机制来实现文件的共享和保护。
当一个进程正在对文件进行读写操作时,其他进程需要等待该进程释放文件的锁才干对文件进行读写操作。
同时,系统还可以设置文件的访问权限,确保惟独具有相应权限的进程才干对文件进行读写操作。
文件管理系统源代码
文件管理系统一、实验目的通过设计一个多用户文件系统, 了解操作系统中文件的组织与管理, 熟悉文件管理所用 的数据结构,加深对文件系统内部功能实现过程的理解。
二、实验内容1.用 C 语言或 C++ 语言设计一个最多包括 N 个用户的多用户文件系统, 约定每个用户 最多保存 M 个文件。
同时限制一个用户在进入系统后,最多打开 L 个文件。
2.系统应具备一定的健壮性。
即能够检查用户所输入命令的正确性,出错时显示出必 要的信息。
另外,对文件需设置必要的保护措施。
3.文件目录结构采用两级目录结构 : 主文件目录和用户文件目录#include"io.h" #include"conio.h" #include"stdio.h" #include"stdlib.h"#include"malloc.h" #include"string.h" #include"ctype.h" #define N 30 #define M 20 #define L 5 typedef struct MFD {char username[100];char password[100];FILE fp;/*文件指针 */}MFD;/////////// typedef struct UFD /* 用户文件目录 */ { char filename[256];char protect; /* 保护码 */int length; /* 文件长度 */ }UFD;////////// typedef struct OFD{charfilename[256]; char opencode; /* 打开保护码 */ int fp; /* 读写指针 */}OFD;/* 用户数 *//* 一个用户可保存 M 个文件*/ /*用户只能一次打开 L 个文件 */ /* 主文件目录 */ /* 打开文件目录 */////////// typedef struct COMM /* 命令串 */{char string[256]; /* 命令 */struct COMM *next;/* 后继指针 */ }COMM;////////////MFD mainfd[N];UFD userfd[M];OFD openfd[L];////////COMM*command; charusername[10];int usernum,savenum,opennum; int workfile;void init();void init_ufd(char*username);/* voidmesg(char *str);char *getpass();char *getuser();COMM *readcommand();void login();void logout();void setpass();void create();void mydelete();void myread();void myopen();void myclose();void mywrite();void help();void dir();void mycopy();void myrename();/////////////初始化用户文件目录 */ /*消息 */ /* 设置口令函数声明 */ /* 设置用户函数声明 */ /* 读命令串函数声明 */ /* 用户登录 */ /* 用户注销 */ /* 设置口令 */ /* 创建文件 */ /* 删除文件 */ /* 读文件 */ /* 打开文件 */ /* 关闭文件 */ /* 写文件 */ /*帮助 */ /* 列文件目录 */ /* 复制文件 */ /* 重命名文件名 */void main(){init();for(;;)readcommand();if(strcmp(command->string,"create")==0)create();else if(strcmp(command->string,"delete")==0)/* 主文件目录数组 */ /* 用户文件目录数组 */ /* 打开文件目录数组 */mydelete();else if(strcmp(command->string,"open")==0)myopen();else if(strcmp(command->string,"close")==0)myclose();else if(strcmp(command->string,"read")==0)myread();else if(strcmp(command->string,"write")==0)mywrite();else if(strcmp(command->string,"copy")==0)mycopy();else if(strcmp(command->string,"rename")==0)myrename();else if(strcmp(command->string,"login")==0)login();else if(strcmp(command->string,"setpass")==0)setpass();else if(strcmp(command->string,"logout")==0)logout();else if(strcmp(command->string,"help")==0)help();else if(strcmp(command->string,"dir")==0) dir();else if(strcmp(command->string,"exit")==0)break;elsemesg("Bad command!");}}///////////////////void init(){FILE *fp;char tempname[20],temppass[20];int i=0;usernum=0;savenum=0;opennum=0;strcpy(username,"");if((fp=fopen("mainfile.txt","r"))!=NULL) {while(!feof(fp))strcpy(tempname,"");fgets(tempname,20,fp);if(strcmp(tempname,"")!=0){{fgets(temppass,20,fp);tempname[strlen(tempname)-1]='\0';temppass[strlen(tempname)-1]='\0';strcpy(mainfd[usernum].username,tempname);strcpy(mainfd[usernum].password,tempname); usernum++;}}fclose(fp);}}///////////////////////void init_ufd(char *username)/* 初始化用户文件目录*/ {FILE *fp;char tempfile[100],tempprot;int templength;savenum=0;opennum=0;workfile=-1;if((fp=fopen(username,"w+"))!=NULL){while(!feof(fp)){strcpy(tempfile,"");fgets(tempfile,50,fp);if(strcmp(tempfile,"")!=0){fscanf(fp,"%c",&tempprot);fscanf(fp,"%d",&templength);tempfile[strlen(tempfile)-1]='\0';strcpy(userfd[savenum].filename,tempfile); userfd[savenum].protect=tempprot;userfd[savenum].length=templength;savenum++;fgets(tempfile,50,fp);}fclose(fp);}////////////////////void mesg(char *str){printf("\n %s\n",str);}////////////////////////////char *getuser(){char username[20];char temp;int i;username[0]='\0';for(i=0;i<10;){while(!kbhit());temp=getch();if(isalnum(temp)||temp=='_'||temp==13) {username[i]=temp; if(username[i]==13){username[i]='\0'; break;}putchar(temp);i++;username[i]='\0';}}return(username);}///////////////////char *getpass(){char password[20];char temp;int i;password[0]='\0';for(i=0;i<10;)while(!kbhit());temp=getch();{if(isalnum(temp)||temp=='_'||temp==13){password[i]=temp;if(password[i]==13){password[i]='\0';break;}putchar('*');i++;password[i]='\0';}}return(password);}///////////////COMM *readcommand(){char temp[256];char line[256];int i,end;COMM *newp,*p;command=NULL;strcpy(line,""); while(strcmp(line,"")==0){printf("\nc:\\>");gets(line);}for(i=0;i<=strlen(line);i++){if(line[i]==' ')i++;end=0;while(line[i]!='\0'&&line[i]!=' '){temp[end]=line[i];end++;i++;}if(end>0)temp[end]='\0';newp=(COMM *)malloc(sizeof(COMM *));{strcpy(newp->string,temp);newp->next=NULL;if(command==NULL) command=newp;else{p=command;while(p->next!=NULL) p=p->next;p->next=newp;}}} p=command;return(command);}/////////////////////////////void login() /* 用户注册*/{FILE *fp;int i;char password[20],confirm[20],tempname[20]; if(command->next==NULL){printf("\n User Name:"); strcpy(tempname,getuser());}else if(command->next->next!=NULL){mesg("Too many parameters!");return;}else strcpy(tempname,command->next->string);for(i=0;i<usernum;i++) if(strcmp(mainfd[i].username,tempname)==0)break; /* 从mainfd 表中查找要注册的用户*/ if(i>=usernum) /* 新用户*/{printf("\n new user account,enter your password twice!"); printf("\nPassword:");strcpy(password,getpass());/* 输入口令且返回之*/ printf("\nPassword:");strcpy(confirm,getpass()); /* 第二次输入口令*/if(strcmp(password,confirm)==0)/* 用户数不能超过N*/ {if(usernum>=N)mesg("Create new account false!number of user asscount limited.\n login fasle!");else{strcpy(mainfd[usernum].username,tempname);/* 把新用户和口令填入mainfd 中*/strcpy(mainfd[usernum].password,password); usernum++;strcpy(username,tempname);mesg("Create a new user!\n login success!");init_ufd(username); /* 初始化用户文件目录*/fp=fopen("mainfile.txt","w+"); /* 把新用户填入mainfile.txt 文件中*/for(i=0;i<usernum;i++){fputs(mainfd[i].username,fp); fputs("\n",fp);fputs(mainfd[i].password,fp);fputs("\n",fp);}fclose(fp);}}else{mesg("Create new account false! Error password.");mesg("login false!");}}else{printf("\n Password:"); strcpy(password,getpass());if(strcmp(mainfd[i].password,password)!=0)mesg("Login false! Error password.");else{mesg("Login success!");strcpy(username,tempname);init_ufd(username);}}}/////////////////////////void logout() /* 用户注销*/{ if(command->next!=NULL)mesg("Too many parameters!");else if(strcmp(username,"")==0)mesg("No user login!");else { strcpy(username,""); opennum=0; savenum=0; workfile=-1; mesg("Userlogout!");}}////////////////////void setpass() /* 修改口令*/{int i=0;FILE *fp;char oldpass[20],newpass[20],confirm[20]; if(strcmp(username,"")==0) mesg("No user login!");else {printf("\n Old password:"); strcpy(oldpass,getpass()); for(inti=0;i<usernum;i++) {if(strcmp(mainfd[i].username,username)==0) break;} if(strcmp(mainfd[i].password,oldpass)!=0) mesg("Old password error!");else{printf("\n New password:"); strcpy(newpass,getpass()); printf("\nConfirm password:");文件管理系统源代码{strcpy(confirm,getpass()); if(strcmp(newpass,confirm)!=0) mesg("Password not change! confirm different.");else{ strcpy(mainfd[i].password,newpass); mesg(" Password change !");fp=fopen("mainfile.txt","w+"); for(i=0;i<usernum;i++) {fputs(mainfd[i].username,fp); fputs("\n",fp);fputs(mainfd[i].password,fp);fputs("\n",fp);}fclose(fp);}}}}////////////////void create(){int i=0;FILE *fp;if(strcmp(username,"")==0)mesg("No user lgoin!");else if(command->next==NULL) mesg("Too few parametets!");else if(command->next->next!=NULL)mesg("Too many parameters!");else{for(i=0;i<savenum;i++){if(strcmp(userfd[i].filename,command->next->string)==0) break;}if(i<savenum)mesg("Error! the file already existed!");else if(savenum>=M)mesg("Error! connot create file! number of files limited!"); elsestrcpy(userfd[savenum].filename,command->next->string);userfd[i].protect='r';userfd[i].length=rand();savenum++; mesg("Create file success!"); fp=fopen(username,"w+");for(i=0;i<savenum;i++){ fputs(userfd[i].filename,fp); fputs("\n",fp);fprintf(fp,"%c\n%d\n",userfd[i].protect,userfd[i].length);} fclose(fp);}}}/////////////////void mydelete() /* 删除*/{int i=0;int tempsave=0;FILE *fp; if(strcmp(username,"")==0) mesg("No user lgoin!");else if(command->next==NULL)mesg("Too few parametets!");else if(command->next->next!=NULL) mesg("Too many parameters!");else { for(i=0;i<savenum;i++) {if(strcmp(userfd[i].filename,command->next->string)==0) break;}if(i>=savenum)mesg("Error! the file not existed!"); else{ tempsave=i; for(i=0;i<opennum;i++) {if(strcmp(command->next->string,openfd[i].filename)==0) break;} if(i>=opennum) mesg("File not open");////////////////////////////////////////////else{ if(tempsave==savenum-1) savenum--;else{ for(;tempsave<savenum-1;tempsave++){ strcpy(userfd[tempsave].filename,userfd[tempsave+1].filename);userfd[tempsave].protect=userfd[tempsave+1].protect;userfd[tempsave].length=userfd[tempsave+1].length;}savenum--;} mesg("Delete file success!"); fp=fopen(username,"w+");for(i=0;i<savenum;i++){ fputs(userfd[i].filename,fp); fputs("\n",fp);fprintf(fp,"%c\n%d\n",userfd[i].protect,userfd[i].length);} fclose(fp);}}}}//////////////////void myread() /*读*/{int i=0;int tempsave=0;char tempfile[100]; if(strcmp(username,"")==0) mesg("No user lgoin!");else if(command->next==NULL)mesg("Too few parametets!");else if(command->next->next!=NULL)mesg("Too many parameters!");else{strcpy(tempfile,command->next->string); for(i=0;i<savenum;i++){ if(strcmp(tempfile,userfd[i].filename)==0) break;} if(i>=savenum) mesg("File not existed!");else{tempsave=i;for(i=0;i<opennum;i++){ if(strcmp(tempfile,openfd[i].filename)==0) break;} if(i>=opennum) mesg("File not opened");else{ if(userfd[tempsave].length<1000) printf("\n The file size is %dKB",userfd[tempsave].length);else if(userfd[tempsave].length==1000) printf("\n The file size is1000 KB");elseprintf("\n The file size is%d,%d KB",userfd[tempsave].length/1000,userfd[tempsave].length%1000);mesg("File read");}}}}/////////////////void myopen()/* 打开*/{int i=0;int type=0;char tempcode;char tempfile[100];if(strcmp(username,"")==0)mesg("No user login!");else if(command->next==NULL)mesg("Too few parameters!");else{strcpy(tempfile,"");文件管理系统源代码tempcode='r';if(strcmp(command->next->string,"/r")==0){tempcode='r';type=1;}else if(strcmp(command->next->string,"/w")==0){tempcode='w';type=1;}else if(strcmp(command->next->string,"/d")==0){tempcode='d';type=1;}else if(command->next->string[0]=='/')mesg("Error! /r/w/d request!");else if(command->next->next!=NULL)mesg("Too many parameters!");elsestrcpy(tempfile,command->next->string);if(type==1){if(command->next->next!=NULL){if(command->next->next->next!=NULL) mesg("Too many parameters!");else strcpy(tempfile,command->next->next->string);}elsemesg("Too few parameters!");}if(strcmp(tempfile,"")){for(i=0;i<savenum;i++){if(strcmp(tempfile,userfd[i].filename)==0) break;if(i>=savenum)mesg("File not existed!");else{for(i=0;i<opennum;i++){if(strcmp(tempfile,openfd[i].filename)==0)break;}if(i<opennum){mesg("File already opened!");if(openfd[i].opencode!=tempcode){openfd[i].opencode=tempcode;mesg("File permission changed!");}}else if(opennum>=L){mesg("Error! connot open file! number of opened fileslimited!");}else{ strcpy(openfd[opennum].filename,tempfile);openfd[opennum].opencode=tempcode; workfile=opennum;opennum++;mesg("File open success!");}}}}}///////////////////////void myclose()/* 关闭*/{int i=0;int tempsave=0;char tempfile[100];if(strcmp(username,"")==0)mesg("No user lgoin!");else if(command->next==NULL)mesg("Too few parametets!");else if(command->next->next!=NULL)mesg("Too many parameters!");else{ strcpy(tempfile,command->next->string); for(i=0;i<savenum;i++){ if(strcmp(tempfile,userfd[i].filename)==0) break;} if(i>=savenum) mesg("File not existed!");else{for(i=0;i<opennum;i++){ if(strcmp(tempfile,openfd[i].filename)==0) break;}if(i>=opennum) mesg("File not opened");else{if(i==opennum-1) opennum--;else{ for(;i<opennum-1;i++) {strcpy(openfd[i].filename,openfd[i+1].filename);openfd[i].opencode=openfd[i+1].opencode;} opennum--;} mesg("Close file success!");}}}}/////////////////////////void mywrite()/* 写*/{int i=0;文件管理系统源代码int tempsave=0;char tempfile[100]; if(strcmp(username,"")==0)mesg("No user lgoin!");else if(command->next==NULL) mesg("Too few parametets!");else if(command->next->next!=NULL) mesg("Too many parameters!");else{ strcpy(tempfile,command->next->string);for(i=0;i<savenum;i++){if(strcmp(tempfile,userfd[i].filename)==0)break;}if(i>=savenum) mesg("File not existed!");else{tempsave=i;for(i=0;i<opennum;i++){if(strcmp(tempfile,openfd[i].filename)==0)break;}if(i>=opennum) mesg("File not opened");else{mesg("File write");int tt=rand();if(userfd[tempsave].length<=1000)printf("\n The file size from %d KB to %dKB",userfd[tempsave].length,userfd[tempsave].length+tt);/* else if(userfd[tempsave].lenght=1000)printf("\n The file size from 1000 KB");*/ elseprintf("\n The file size form %d,%d KB to %d,%dKB",userfd[tempsave].length/1000,userfd[tempsave].length%1000,userfd[tempsave].lengt h+tt/10 00,userfd[tempsave].length+tt%1000);userfd[tempsave].length=userfd[tempsave].length+tt;}}}///////////////////void help()/* 帮助*/{static char *cmd[]={"login","setpass","logout","create","open","read","write","close","delete","dir","help","exit","copy","rename"};static char *cmdhlp[]={"aommand format: login [<username>]","command format:setpass","command format:logout","command format:create <filename>","command format:open [/r/w/d] <filename>","command format:read <filename>","command format:write <filename>","command format:close <filename>","command format:delete <filename>","command format:dir [/u/o/f]","command format:help [<command>]","command format:exit","command format:copy <source filename> <destination filename>","command format:rename <old filename> <new filename>"};static char *detail[]={"explain:user login in the file system.","explain:modify the user password.","explain:user logout the file system.","explain:creat a new file.","explain:/r -- read only [deflaut]\n\t /w -- listopened files \n\t/d --read,modify and delete.","explain:read the file.","explain:modify the file.","explain:close the file.","explain:delete the file.","explain:/u -- list the user account\n\t /0 -- listopened files\n\t/f --list user file[deflaut].","explain:<command> -- list the command detail format and explain.\n\t [deflaut] list the command.","explain:exit from the file sysytem.","explain:copy from one file to another file.","explain:modify the file name."};int helpnum=14;int i=0;if(command->next==NULL){mesg(cmdhlp[10]);mesg(detail[10]);mesg("step 1: login");printf("\t if old user then login,if user not exist then create new user");mesg("step 2: open the file for read(/r),write(/w)or delete(/d)");printf("\t you can open one or more files.one command can open one file");mesg("step 3: read,write or delete some one file");printf("\t you can operate one of the opened files.one command can open onefile"); mesg("step 4: close the open file");printf("\t you can close one of the opened files.one command can open onefile"); mesg("step 5: user logout.close all the user opened files");printf("\n command list:");for(i=0;i<helpnum;i++){if(i%4==0) printf("\n");printf(" %-10s",cmd[i]);}}else if(command->next->next!=NULL)mesg("Too many parameters!");else{for(i=0;i<helpnum;i++){ if(strcmp(command->next->string,cmd[i])==0) break;}if(i>=helpnum)mesg("the command not existed!");else{mesg(cmdhlp[i]); mesg(detail[i]);}}}//////////////////////void dir()/* 列目录文件*/{int i=0;int type=0;char tempcode;if(strcmp(username,"")==0)mesg("No user login!");else{if(command->next==NULL){tempcode='f';else{ if(strcmp(command->next->string,"/u")==0) {tempcode='u';}else if(strcmp(command->next->string,"/o")==0){tempcode='o';}else if(strcmp(command->next->string,"/f")==0){tempcode='f';}else if(command->next->string[0]=='/') mesg("Error! /u/o/f request!");elseif(command->next->next!=NULL)mesg("Too many parameters!");}if('u'==tempcode){printf("list the user account\n"); printf("usename\n");for(i=0;i<usernum;i++){ printf("%s\n",mainfd[i].username);}}else if('f'==tempcode){printf("list opened files\n"); printf("filename length protect\n");for(i=0;i<savenum;i++){ printf("%s%s%d%s%s%c\n",userfd[i].filename," ",userfd[i].length,"KB"," ",userfd[i].protect);}else if('o'==tempcode){printf("list user files\n");printf("filename opencode\n"); for(i=0;i<opennum;i++){ printf("%s%s%c\n",openfd[i].filename,"}",openfd[i].opencode);}}}/////////////////////////void mycopy()/* 复制*/{char sourfile[256],destfile[256];int i=0,j=0,temp=0;FILE *fp;char tempchar;if(strcmp(username,"")==0)mesg("No user lgoin!");else if(command->next==NULL)mesg("Too few parametets!");else if(command->next->next==NULL)mesg("Too few parametets!");else if(command->next->next->next!=NULL)mesg("Too many parameters!");else{strcpy(sourfile,command->next->string);strcpy(destfile,command->next->next->string); for(i=0;i<savenum;i++){if(strcmp(sourfile,userfd[i].filename)==0) break;}temp=i;if(i>=savenum)printf("\n the source file not eixsted!");else{ for(i=0;i<opennum;i++) {if(strcmp(sourfile,openfd[i].filename)==0) break;}if(i>=opennum)printf("\n the source file not opened!");else{for(j=0;j<opennum;j++){if(strcmp(destfile,openfd[i].filename)==0)break;}if(j<opennum)文件管理系统源代码mesg("Error! the destination file opened,you must close it first."); else{for(j=0;j<savenum;j++){if(strcmp(destfile,userfd[i].filename)==0)break;}if(j<savenum){mesg("Warning! the destination file exist!");printf("\n Are you sure to recover if ? [Y/N]");while(!kbhit());tempchar=getch();if(tempchar=='N'||tempchar=='n')mesg("Cancel! file not copy.");else if(tempchar=='Y'||tempchar=='y'){mesg("File copy success!file recovered!");userfd[j].length=userfd[i].length;userfd[j].protect=userfd[i].protect;fp=fopen(username,"w+");for(i=0;i<savenum;i++){fputs(userfd[i].filename,fp);fputs("\n",fp);fprintf(fp,"%C\n%d\n",userfd[i].protect,userfd[i].length);}fclose(fp);}}else if(savenum>=M)mesg("copy false! file total limited.");else{strcpy(userfd[savenum].filename,destfile);userfd[savenum].length=userfd[temp].length;userfd[savenum].protect=userfd[temp].protect;savenum++;fp=fopen(username,"w+");for(i=0;i<savenum;i++){fputs(userfd[i].filename,fp);fputs("\n",fp);fprintf(fp,"%c\n%d\n",userfd[i].protect,userfd[i].length);}fclose(fp);mesg("File copy success!");}}}}}}///////////////////////void myrename()/* 文件重命名*/{char oldfile[256],newfile[256];int i=0,temp=0;if(strcmp(username,"")==0)mesg("No user lgoin!");else if(command->next==NULL)mesg("Too few parametets!");else if(command->next->next==NULL)mesg("Too few parametets!");else if(command->next->next->next!=NULL)mesg("Too many parameters!");else{strcpy(oldfile,command->next->string);strcpy(newfile,command->next->next->string);for(i=0;i<savenum;i++){if(strcmp(oldfile,userfd[i].filename)==0)break;}} }temp=i;if(temp>=savenum)printf("\n the source file not eixsted!");else if(temp!=i&&i<savenum){printf("\n newfile and the existing files is the same name, please re-naming!"); } else{for(i=0;i<opennum;i++){if(strcmp(oldfile,openfd[i].filename)==0) break;}if(i>=opennum)printf("\n the source file not opened!");else if(strcmp(oldfile,newfile)==0){printf("Rename false! oldfile and newfile can not be the same.");}else{ strcpy(openfd[i].filename,newfile);strcpy(userfd[temp].filename,newfile); mesg("Rename filesuccess!\n");}。
bochs的bximage用法
【bochs的bximage用法】1.介绍Bochs是一个开源的模拟器,可用于模拟x86系统。
它包括一个能够模拟计算机硬件的模拟器,如处理器、内存、硬盘和输入/输出设备。
bximage是Bochs提供的一个用于创建和管理磁盘镜像文件的工具。
本文将介绍bximage的基本用法,帮助用户更好地理解和使用这一工具。
2.创建磁盘镜像我们需要用bximage来创建一个磁盘镜像文件。
打开命令行界面,输入bximage命令,然后按照提示进行操作。
用户可以选择创建不同类型和大小的磁盘镜像文件,包括固定大小、动态增长和扇区大小等选项。
通过bximage,用户可以根据实际需求创建适合的磁盘镜像文件,以供Bochs模拟器使用。
3.管理磁盘镜像除了创建磁盘镜像文件,bximage还可以用于管理已有的磁盘镜像文件。
用户可以通过bximage对磁盘镜像进行扩容、格式化和挂载等操作。
这些操作能够帮助用户更好地管理和维护磁盘镜像,确保其在Bochs模拟器中的正常运行。
4.个人观点bximage作为Bochs模拟器的一个重要工具,对于模拟器的用户来说非常实用。
通过bximage,用户可以方便地创建和管理磁盘镜像文件,为模拟器的使用提供了便利。
bximage还提供了丰富的选项和功能,满足了不同用户对于磁盘镜像文件的需求。
5.总结与回顾在本文中,我们介绍了Bochs模拟器的bximage工具的基本用法,包括创建磁盘镜像和管理磁盘镜像等操作。
通过深入了解bximage的使用方法,用户可以更好地利用这一工具,为Bochs模拟器的应用提供便利。
个人观点部分也展示了对于这一工具的认识和理解。
希望本文能帮助读者更好地掌握bximage的用法,提高Bochs模拟器的应用水平。
6.结语bximage是Bochs模拟器的重要工具,其用法对于模拟器的用户来说至关重要。
通过本文的介绍,读者可以更好地了解和掌握bximage的使用方法,为模拟器的使用提供便利。
VFS虚拟文件系统
VFS虚拟⽂件系统⼀、VFS简介Linux 采⽤ Virtual Filesystem(VFS)的概念,通过内核在物理存储介质上的⽂件系统和⽤户之间建⽴起⼀个虚拟⽂件系统的软件抽象层,使得 Linux 能够⽀持⽬前绝⼤多数的⽂件系统,不论它是 windows、unix 还是其他⼀些系统的⽂件系统,都可以挂载在 Linux 上供⽤户使⽤。
VFS 在 Linux 中是⼀个处理所有 unix ⽂件系统调⽤的软件层,同时给不同类型的⽂件系统提供⼀个统⼀的接⼝。
VFS ⽀持以下归类的三种类型的⽂件系统:(1) 磁盘⽂件系统,存储在本地磁盘、U盘、CD等的⽂件系统,它包含各种不同的⽂件系统格式,⽐如 windows NTFS、VFAT,BSD 的UFS,CD的 CD-ROM 等(2) ⽹络⽂件系统,它们存储在⽹络中的其他主机上,通过⽹络进⾏访问,例如 NFS(3) 特殊⽂件系统,例如 /proc、sysfs 等VFS 背后的思想就是建⽴⼀个通⽤的⽂件模型,使得它能兼容所有的⽂件系统,这个通⽤的⽂件模型是以 Linux 的⽂件系统 EXT 系列为模版构建的。
每个特定的⽂件系统都需要将它物理结构转换为通⽤⽂件模型。
例如,通⽤⽂件模型中,所有的⽬录都是⽂件,它包含⽂件和⽬录;⽽在其他的⽂件类型中,⽐如 FAT,它的⽬录就不属于⽂件,这时,内核就会在内存中⽣成这样的⽬录⽂件,以满⾜通⽤⽂件模型的要求。
同时,VFS 在处理实际的⽂件操作时,通过指针指向特定⽂件的操作函数。
可以认为通⽤⽂件模型是⾯向对象的设计,它实现了⼏个⽂件通⽤模型的对象定义,⽽具体的⽂件系统就是对这些对象的实例化。
通⽤⽂件模型包含下⾯⼏个对象:(1) superblock 存储挂载的⽂件系统的相关信息(2) inode 存储⼀个特定⽂件的相关信息(3) file 存储进程中⼀个打开的⽂件的交互相关的信息(4) dentry 存储⽬录和⽂件的链接信息(5) 这⼏个通⽤⽂件模型中的对象之间的关系如下图所⽰:VFS 除了提供⼀个统⼀⽂件系统接⼝,它还提供了名为 dentry cache 的磁盘缓存,⽤于加速⽂件路径的查找过程。
【计算机工程与设计】_模拟器_期刊发文热词逐年推荐_20140726
2012年 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
科研热词 推荐指数 随机性检测 1 通用可组合安全分析模型 1 软硬件协同设计 1 转发策略 1 路由技术 1 结构化网络 1 硬件性能 1 真随机数发生器 1 模拟器 1 椭圆曲线密码体制 1 构造方法 1 本体 1 效能评估 1 指控系统 1 指令集模拟器 1 指令集体系结构 1 报文拷贝 1 对等网络 1 密码协议 1 容迟网络 1 安全性证明 1 后处理电路 1 半实物模拟器 1 分布式仿真 1 典型场景 1 兴趣 1 信息检索 1 仿真引擎 1 仿真 1 串并行输出单元 1 专用指令集处理器 1 rc电路 1
2013年 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
科研热词 模拟器 路由算法 超长指令字(vliw) 虫洞攻击 水下传感网络 死锁 机群系统 数字信号处理器(dsp) 指令级精度 拆分对象 多棵树路由算法 外设 处理器建模 中断 不规则拓扑网络 vtest平台 vbf(基于向量转发) tms320c3x指令集 ns2(网络模拟器)
推荐指数 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2010年 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
科研热词 邻居点选择 逼近理想解的排序法 资源管理 网络模拟器第2代 网络性能 网格资源分配 网格模拟器 组播 移动自组网 服务水平协议 文件共享 效用 性能分析 多指标综合评价 决策算法 仿真 云计算 云仿真模拟器 pa-maodv p2p n叉树 btsim模拟器
计算机专业基础综合(文件管理)模拟试卷3
计算机专业基础综合(文件管理)模拟试卷3(总分:46.00,做题时间:90分钟)一、<B>单项选择题1-40小题。
下列每题给出的四个选项中,只有一个选项是最符合题目要求的。
</B>(总题数:16,分数:32.00)1.UNIX系统中,文件存储器的管理采用的是( )。
A.位图法B.空闲块表法C.成组链接法√D.单块连接法2.只适合顺序存取,不提供随机存取功能的存储介质是( )。
A.磁盘B.磁鼓C.磁带√D.光盘3.对磁盘请求重新排队的目的是( )。
A.重置移臂时间B.让优先级高的进程先I/OC.减少传输时间D.减少旋转时间√4.下列不便于文件扩充的物理文件结构是( )。
A.连续文件√B.串联文件C.索引文件D.多重索引文件5.在文件系统中,文件的不同物理结构有不同的优缺点。
在下列文件的物理组织结构中,不具有直接读写文件任意一个记录的能力的结构是( )。
A.连续文件B.串联文件√C.索引文件D.逻辑文件6.文件系统为每个文件另建立一张指示逻辑记录和物理记录之间的对应关系表,由此表和文件本身构成的文件是( )。
A.连续文件B.串联文件C.索引文件√D.逻辑文件7.在磁盘上,最容易导致存储碎片发生的物理文件结构是( )。
A.隐式链接B.顺序存放√C.索引存放D.显式链接本题考查物理文件结构的特点。
顺序文件的优点是在顺序存取时速度较快,因为这类文件往往从头至尾依次顺序存取。
但是也存在缺点,首先要求在存储文件时确定文件的长度,依此来分配相应的存储空间,这样会造成在寻找存储空间时耗时较多,一旦没有足够的存储空间来存放该文件时会造成文件存储的失败。
其次,顺序文件不便于文件的扩充,在实际工作中,文件的长度往往会改变,可能会变长,也有可能变短。
变短了可能会空出存储空间,形成存储碎片。
而变长了更成问题,若该文件后面没有存储空间了,系统不得不为此文件寻找一个适合它的存储空间,并将文件的所有内容搬运过来。
虚拟文件系统的实现.
渤海大学操作系统课程设计实验报告书题目:虚拟文件系统的实现题目编号:院系:软件服务与外包学院班级:11级2班小组成员:陈镜欢学号:*********王晨学号:*********2013-06-30目录一、课程设计任务划分 (1)二、基本原理 (1)2.1主要操作函数 (1)2.2数据结构 (1)2.3算法流程图 (3)三、基本思路 (4)3.1 设计简介 (4)3.2 设计方案论述 (4)3.3 文件基本操作 (4)四、调试及实验结果 (5)运行结果分析 (8)五、个人体会 (8)一、课程设计任务划分陈镜欢:主要编写代码熟悉课题的任务和要求,查阅相关文献和资料,并做好编码准备,调试,验收王晨:程序编码、调试和测试,书写报告二、基本原理2.1主要操作函数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();2.2数据结构struct 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; /*当前打文件的数目*/};2.3算法流程图三、基本思路3.1 设计简介本系统是模拟实现多用户多目录的文件系统,在系统出现登录后 ,输入用户与口令,在用户登录系统后,可建立文件卷,将用户输入的文件保存在指定的文件中。
如何进行计算机硬件模拟
如何进行计算机硬件模拟计算机硬件模拟是一种通过软件仿真计算机的物理部件和行为的技术。
它可以帮助我们更好地理解和研究计算机硬件的工作原理,提高硬件设计的效率,并且可以应用于教育培训、测试和验证等领域。
本文将介绍如何进行计算机硬件模拟,包括模拟原理、软件工具和应用实例。
一、模拟原理计算机硬件模拟的基本原理是通过软件模拟计算机的各个硬件组件,包括中央处理器(CPU)、内存、输入输出设备等。
模拟器可以模拟硬件组件的工作过程和相互之间的交互,从而实现对计算机整体行为的模拟。
模拟器通常使用硬件描述语言(HDL)来描述硬件的逻辑功能和结构,并通过编译器将HDL代码翻译成可执行的模拟器软件。
模拟器软件可以模拟硬件的时序行为、信号传输和处理等细节,并提供接口与外部环境进行交互。
二、软件工具1. VerilogVerilog是一种常用的硬件描述语言,它提供了对硬件行为和结构进行描述的能力。
借助Verilog,我们可以编写模拟器所需的硬件描述代码,并通过编译器将其转换成可执行的模拟器软件。
Verilog的应用非常广泛,有许多开源的Verilog编译器和模拟器可供选择。
2. VHDLVHDL是另一种常用的硬件描述语言,它也具有描述硬件行为和结构的能力。
与Verilog类似,VHDL可以用于编写模拟器所需的硬件描述代码,并通过编译器生成可执行的模拟器软件。
VHDL在军事、航空航天等领域有较广泛的应用。
3. QEMUQEMU是一款开源的虚拟机监控器软件,它提供了硬件模拟的功能。
QEMU可以模拟多种硬件平台,包括x86、ARM等,并支持多种操作系统,如Windows、Linux等。
通过QEMU,我们可以在不同硬件平台上模拟运行操作系统和应用程序。
4. BochsBochs是另一款开源的全系统模拟器,它可以模拟x86架构的计算机系统。
Bochs可以模拟计算机硬件的行为,包括指令执行、内存访问、中断处理等。
Bochs支持多种操作系统,并提供了调试和性能分析等功能。
tune2fs 原理
tune2fs 原理tune2fs是一个用于调整ext2、ext3、ext4文件系统参数的命令行工具,它的原理是通过修改文件系统的超级块来实现对文件系统的调整和优化。
文件系统超级块是文件系统的一个关键部分,它存储着文件系统的重要信息,比如文件系统的块大小、inode数量、数据块的分布等。
tune2fs利用这些信息来调整文件系统的各项参数,以提高文件系统的性能和可靠性。
tune2fs的使用非常灵活,可以根据实际需求来调整文件系统的不同参数。
下面我们来介绍一些常用的参数调整方法。
1. 调整文件系统的挂载选项:可以使用tune2fs命令来修改文件系统的挂载选项,比如可以修改文件系统的读写权限、让文件系统支持日志功能等。
例如,使用以下命令可以将文件系统设置为只读模式:```tune2fs -o ro /dev/sda1```2. 调整文件系统的最大挂载次数:文件系统的最大挂载次数是一个重要的参数,它指定了文件系统在发生错误时最多可以挂载的次数。
可以使用tune2fs命令来修改最大挂载次数,以提高文件系统的可靠性。
例如,使用以下命令可以将文件系统的最大挂载次数设置为10次:```tune2fs -c 10 /dev/sda1```3. 调整文件系统的保护间隔:文件系统的保护间隔是一个用于保护文件系统数据完整性的参数,它指定了文件系统在发生错误时进行修复的时间间隔。
可以使用tune2fs命令来修改保护间隔,以提高文件系统的可靠性。
例如,使用以下命令可以将文件系统的保护间隔设置为30天:```tune2fs -i 30d /dev/sda1```4. 调整文件系统的块大小:文件系统的块大小是一个影响文件系统性能的重要参数,可以使用tune2fs命令来修改文件系统的块大小,以提高文件系统的读写速度。
例如,使用以下命令可以将文件系统的块大小设置为4096字节:```tune2fs -b 4096 /dev/sda1```5. 调整文件系统的inode数量:文件系统的inode数量是一个影响文件系统可用空间的重要参数,可以使用tune2fs命令来修改文件系统的inode数量,以提高文件系统的存储容量。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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即可退出系统。