南邮操作系统实验4.文件系统模拟实现 .docx
南邮操作系统实验4.文件系统模拟实现
关闭文件close close (fd);
实验内容及原理说明——实验4
读文件read
写文件write
nr = read (fd, buf, count); buf 为读出信息所应送入的用户数据区首地址 count 为要求传送字节数 nr 为实际读入字节数 一旦读到文件末尾,系统调用就返回,故nr可能小于 count,甚至为0 nw = write (fd, buf, count); 参数类似 read 其中 buf 是信息传送的源地址,即将buf指向的用户数 据区中的信息写入文件中
具体功能:
#include <unistd.h> #include <stdio.h> #include <fcntl.h>
实验内容及原理说明——实验4
创建文件creat(兼具打开功能)
fd = creat (filenamep, mode);
filenamep指向所要创建的文件路径名
实验4:文件系统的模拟实现
实验基本信息 实验内容说明
实验基本信息
实验名称
文件系统的模拟实现
实验类型:综合 学时:2+2 实验时间:13.5.30(下午3-4节) 地点:教5-501 实验环境:
VMWare + Ubuntu
实验内容及原理说明——实验4
实验目link、open、close、 read、write的使用,编程模拟实现文件系统基本功能 运行终端给出命令提示,请用户选择创建、删除、读、 写、退出等操作(可用数字表示不同命令) 根据用户选择命令,提示用户输入文件名、文件内容 等信息 执行用户命令
南京邮电大学-操作系统实验报告
课内实验报告课程名:操作系统任课教师:沈超专业:信息管理与信息系统学号:姓名:二○一六至二○一七年度第一学期南京邮电大学经济与管理学院Process[numberschedul].order=tempcounter;}程序结果截图:二、银行家算法(网上借鉴)银行家算法,当进程提出资源申请时,系统首先检查该进程对资源的申请量是否超过其最大需求量及系统现有的资源能否满足进程需要。
若超过,则报错,若不能满足,则让该进程等待;否则进一步检查把资源分给该进程后系统能否出于安全状态,若安全,则分配,否则置该进程为等待资源状态。
算法实现过程:设进程i 提出请求REQUEST [j] ,则银行家算法按如下规则进行判断。
(1) 如果REQUEST [i] [j]<= NEED[i][j] ,则转(2) ;否则,出错。
(2) 如果REQUEST [i] [j]<= A V AILABLE[i][j] ,则转(3) ;否则,出错。
(3) 系统试探分配资源,修改相关数据:A V AILABLE[j]-=REQUEST[i][j];ALLOCATION[i][j]+=REQUEST[i][j];NEED[i][j]-=REQUEST[i][j];(4) 系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。
Check()关键代码:{int k, f, no=0;int work[M],a[M];char finish[M];anquan=1;for(i=0;i<n; i++) finish[i]='F';for(j=0;j<m; j++) work[j]=available[j]; k=n;do{ for (i=0;i<n; i++){if (finish[i]=='F'){ f=1;for (j=0;j<m; j++)if (need[i][j]>work[j]) printf("处于安全状态.");printf("安全序列号:");for (i=0;i<n;i++) printf ("%d ",a[i]); printf("\n");printf("进程");printf(" ");printf(" Max ");rintf(" ");rintf("allocation");printf(" ");printf("need");printf(" ");f=0;if (f==1)//找到还没完成的且需求数小于可提供进程继续运行的{ finish[i]='T';a[no++]=i;//记录安全序列号for (j=0;j<m; j++)work[j]=work[j]+allocation[i][j];//释放该进程已分配的资源available[j] =work[j];}}}k--; }while(k>0);f=1;for (i=0;i<n; i++)//判断有没有进程没完成{ if (finish[i]=='F'){f=0;break; }} if (f==0) {printf("不安全状态!\n");anquan=0;} else {printf("available");printf("\n");for (i=0;i<n; i++){ printf("%2d",i);printf(" ");for(j=0;j<m; j++)printf("%2d",max[i][j]);printf(" ");for(j=0;j<m; j++)printf("%2d",allocation[i][j]);printf(" ");for(j=0;j<m; j++)printf("%2d",need[i][j]);printf(" ");for(j=0;j<m; j++){if(i>0)break;printf("%2d",available[j]);}printf("\n");}}}程序结果截图:三、实验总结:这次上机模拟了进程调度过程和解决了死锁问题,让我对短作业优先调度算法和银行家算法有了比在课堂上更深刻的认识。
操作系统实习报告--文件管理模拟
操作系统小学期----文件管理模拟学院:信息科学与技术专业:计算机科学与技术年级:班级:姓名:学号:日期:2011年9月一.问题描述文件管理是操作系统的五大职能之一,主要涉及文件的逻辑组织和物理组织,目录的结构和管理。
主要的磁盘调度算法有:1.先来先服务算法(FCFS);2.最短寻道时间优先算法(SSTF);3.扫描算法(SCAN);4.循环扫描算法(CSCAN)等。
用程序模拟磁盘的调度过程,并计算各磁盘调度算法包括先来先服务算法、最短寻道时间优先算法、扫描算法和循环扫描算法的平均寻道长度。
二.问题分析在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。
由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列。
先来先服务(FCFS :afirst-come-first-served)的策略,即先来的请求先被响应。
FCFS策略看起来似乎是相当"公平"的,但是当请求的频率过高的时候FCFS策略的响应时间就会大大延长。
FCFS策略为我们建立起一个随机访问机制的模型,但是假如用这个策略反复响应从里到外的请求,那么将会消耗大量的时间。
为了尽量降低寻道时间,看来我们需要对等待着的请求进行适当的排序,而不是简单的使用FCFS策略。
这个过程就叫做磁盘调度管理。
有时候fcfs也被看作是最简单的磁盘调度算法。
最短时间优先算法(SSTF)选择这样的进程。
要求访问的磁道,与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。
扫描(SCAN)调度算法:该算法不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑的是磁头当前的移动方向。
例如,当磁头正在自里向外移动时,SCAN算法所考虑的下一个访问对象,应是其欲访问的磁道,既在当前磁道之外,又是距离最近的。
这样自里向外的访问,直至再无更外的磁道需要访问时,才将磁道换向自外向里移动。
操作系统文件管理系统模拟实验
操作系统文件管理系统模拟实验在计算机科学中,操作系统是一种系统软件,负责管理计算机硬件和软件资源,并为用户和应用程序提供接口。
文件管理系统是操作系统的一个重要组成部分,它负责管理计算机系统中的文件和目录,以及提供对它们的访问和操作。
本次实验旨在模拟操作系统中文件管理系统的基本功能和操作。
我们将使用一个虚拟的文件系统,通过命令行界面来模拟用户与文件系统的交互。
以下是实验的具体内容和步骤:1. 创建虚拟文件系统首先,我们需要创建一个虚拟的文件系统。
文件系统由文件和目录组成,可以通过树状结构来表示。
我们可以使用一个数据结构来模拟文件系统的存储和管理。
2. 初始化文件系统在开始操作文件系统之前,我们需要初始化文件系统。
这包括创建根目录和设置当前目录为根目录。
3. 文件和目录的创建与删除文件和目录是文件系统的基本单位。
我们可以通过命令来创建和删除文件和目录。
例如,使用"mkdir"命令创建一个目录,使用"touch"命令创建一个空文件,使用"rm"命令删除文件或目录。
4. 文件和目录的访问权限文件和目录可以设置不同的访问权限,以保护文件系统的安全性。
我们可以使用"chmod"命令来修改文件或目录的权限。
权限通常包括读、写和执行权限。
5. 文件和目录的重命名和移动我们可以使用"mv"命令来重命名文件或目录,使用"cp"命令来复制文件或目录,使用"mv"命令来移动文件或目录。
6. 文件和目录的查找和显示我们可以使用"ls"命令来显示当前目录下的文件和目录,使用"cd"命令来切换当前目录,使用"pwd"命令来显示当前目录的路径。
此外,我们还可以使用"find"命令来查找文件或目录。
7. 文件和目录的读写操作文件可以被读取和写入。
操作系统文件管理系统模拟实验
文件管理系统模拟1.实验目的通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现2.实验内容为Linux系统设计一个简单的二级文件系统。
要求做到以下几点:(1)可以实现下列几条命令(至少4条)login 用户登录dir 列文件目录~create 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件(2)列目录时要列出文件名、物理地址、保护码和文件长度;(3)源文件可以进行读写保护。
、3.实验提示(1)首先应确定文件系统的数据结构:主目录、子目录及活动文件等。
主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。
(2)用户创建的文件,可以编号存储于磁盘上。
入file0,file1,file2…并以编号作为物理地址,在目录中进行登记。
4.源代码#include<>#include<>#include<>#define MEM_D_SIZE 1024*1024 tem=-1; /*引导块*/fat[0].em_disk='1';for(i=1;i<ROOT_DISK_NO-1;i++) /*存放FAT表的磁盘块号*/fat[i].item=i+1;fat[i].em_disk='1';}fat[ROOT_DISK_NO].item=-1; /*存放根目录的磁盘块号*/fat[ROOT_DISK_NO].em_disk='1';for(i=ROOT_DISK_NO+1;i<DISK_NUM;i++){fat[i].item = -1;fat[i].em_disk = '0';}/*-----------------------------------------------*/root = (struct direct *)(fdisk+DISKSIZE+FATSIZE); /*根目录的地址*/ /*初始化目录*//*---------指向当前目录的目录项---------*/root->directitem[0].sign = 1;root->directitem[0].firstdisk = ROOT_DISK_NO;strcpy(root->directitem[0].name,".");root->directitem[0].next = root->directitem[0].firstdisk;root->directitem[0].property = '1';root->directitem[0].size = ROOT_DISK_SIZE;/*-------指向上一级目录的目录项---------*/root->directitem[1].sign = 1;root->directitem[1].firstdisk = ROOT_DISK_NO;strcpy(root->directitem[1].name,"..");root->directitem[1].next = root->directitem[0].firstdisk;root->directitem[1].property = '1';root->directitem[1].size = ROOT_DISK_SIZE;if((fp = fopen("","wb"))==NULL){printf("Error:\n Cannot open file \n");return;}for(i=2;i<MSD+2;i++) /*-子目录初始化为空-*/{root->directitem[i].sign = 0;root->directitem[i].firstdisk = -1;strcpy(root->directitem[i].name,"");root->directitem[i].next = -1;root->directitem[i].property = '0';root->directitem[i].size = 0;}if((fp = fopen("","wb"))==NULL){printf("Error:\n Cannot open file \n");return;}if(fwrite(fdisk,MEM_D_SIZE,1,fp)!=1) /*把虚拟磁盘空间保存到磁盘文件中*/ {printf("Error:\n File write error! \n");}fclose(fp);}void enter(){FILE *fp;int i;fdisk = (char *)malloc(MEM_D_SIZE*sizeof(char)); /*申请1M空间*/if((fp=fopen("","rb"))==NULL){printf("Error:\nCannot open file\n");return;}if(!fread(fdisk,MEM_D_SIZE,1,fp)) /*把磁盘文件读入虚拟磁盘空间(内存)*/ {printf("Error:\nCannot read file\n");exit(0);}fat = (struct fatitem *)(fdisk+DISKSIZE); /*找到FAT表地址*/root = (struct direct *)(fdisk+DISKSIZE+FATSIZE);/*找到根目录地址*/fclose(fp);/*--------------初始化用户打开表------------------*/for(i=0;i<MOFN;i++){strcpy[i].name,"");[i].firstdisk = -1;[i].size = 0;}= 0;cur_dir = root; /*当前目录为根目录*/bufferdir = (char *)malloc(DIR_MAXSIZE*sizeof(char));strcpy(bufferdir,"Root:");}void halt(){FILE *fp;int i;if((fp=fopen("","wb"))==NULL){printf("Error:\nCannot open file\n");return;}if(!fwrite(fdisk,MEM_D_SIZE,1,fp)) /*把虚拟磁盘空间(内存)内容读入磁盘文件*/{printf("Error:\nFile write error!\n");}fclose(fp);free(fdisk);free(bufferdir);return;}int create(char *name){int i,j;if(strlen(name)>8) /*文件名大于8位*/return(-1);for(j=2;j<MSD+2;j++) /*检查创建文件是否与已存在的文件重名*/{if(!strcmp(cur_dir->directitem[j].name,name))break;}if(j<MSD+2) /*文件已经存在*/return(-4);for(i=2;i<MSD+2;i++) /*找到第一个空闲子目录*/{if(cur_dir->directitem[i].firstdisk==-1)break;}if(i>=MSD+2) /*无空目录项*/return(-2);if>=MOFN) /*打开文件太多*/return(-3);for(j=ROOT_DISK_NO+1;j<DISK_NUM;j++) /*找到空闲盘块j 后退出*/ {if(fat[j].em_disk=='0')break;}if(j>=DISK_NUM)return(-5);fat[j].em_disk = '1'; /*将空闲块置为已经分配*//*-----------填写目录项-----------------*/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';/*---------------------------------*/fd = open(name);return 0;}int open(char *name){int i, j;for(i=2;i<MSD+2;i++) /*文件是否存在*/{if(!strcmp(cur_dir->directitem[i].name,name))break;}if(i>=MSD+2)return(-1);/*--------是文件还是目录-----------------------*/if(cur_dir->directitem[i].property=='1')return(-4);/*--------文件是否打开-----------------------*/for(j=0;j<MOFN;j++){if(!strcmp[j].name,name))break;}if(j<MOFN) /*文件已经打开*/return(-2);if>=MOFN) /*文件打开太多*/return(-3);/*--------查找一个空闲用户打开表项-----------------------*/for(j=0;j<MOFN;j++){if[j].firstdisk==-1)break;}/*--------------填写表项的相关信息------------------------*/[j].firstdisk = cur_dir->directitem[i].firstdisk;strcpy[j].name,name);[j].size = cur_dir->directitem[i].size;++;/*----------返回用户打开表表项的序号--------------------------*/return(j);}int close(char *name){int i;for(i=0;i<MOFN;i++){if(!strcmp[i].name,name))break;}if(i>=MOFN)return(-1);/*-----------清空该文件的用户打开表项的内容---------------------*/ strcpy[i].name,"");[i].firstdisk = -1;[i].size = 0;;return 0;}int write(int fd, char *buf, int len){char *first;int item, i, j, k;int ilen1, ilen2, modlen, temp;/*----------用$ 字符作为空格# 字符作为换行符-----------------------*/ 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;}/*----------读取用户打开表对应表项第一个盘块号-----------------------*/ item = [fd].firstdisk;/*-------------找到当前目录所对应表项的序号-------------------------*/for(i=2;i<MSD+2;i++){if(cur_dir->directitem[i].firstdisk==item)break;}temp = i; /*-存放当前目录项的下标-*//*------找到的item 是该文件的最后一块磁盘块-------------------*/while(fat[item].item!=-1){item =fat[item].item; /*-查找该文件的下一盘块--*/ }/*-----计算出该文件的最末地址-------*/first = fdisk+item*DISKSIZE+[fd].size%DISKSIZE;/*-----如果最后磁盘块剩余的大小大于要写入的文件的大小-------*/ if[fd].size%DISKSIZE>len)strcpy(first,buf);[fd].size = [fd].size+len;cur_dir->directitem[temp].size = cur_dir->directitem[temp].size+len;}else{for(i=0;i<[fd].size%DISKSIZE);i++){/*写一部分内容到最后一块磁盘块的剩余空间(字节)*/first[i] = buf [i];}/*-----计算分配完最后一块磁盘的剩余空间(字节) 还剩下多少字节未存储-------*/ilen1 = len-[fd].size%DISKSIZE);ilen2 = ilen1/DISKSIZE;modlen = ilen1%DISKSIZE;if(modlen>0)ilen2 = ilen2+1; /*--还需要多少块磁盘块-*/for(j=0;j<ilen2;j++){for(i=ROOT_DISK_NO+1;i<DISK_NUM;i++)/*寻找空闲磁盘块*/{if(fat[i].em_disk=='0')break;}if(i>=DISK_NUM) /*--如果磁盘块已经分配完了-*/return(-1);first = fdisk+i*DISKSIZE; /*--找到的那块空闲磁盘块的起始地址-*/if(j==ilen2-1) /*--如果是最后要分配的一块-*/{for(k=0;k<len-[fd].size%DISKSIZE)-j*DISKSIZE;k++)first[k] = buf[k];}else/*-如果不是要最后分配的一块--*/{for(k=0;k<DISKSIZE;k++)first[k] =buf[k];}fat[item].item = i; /*--找到一块后将它的序号存放在上一块的指针中-*/fat[i].em_disk = '1'; /*--置找到的磁盘快的空闲标志位为已分配-*/fat[i].item = -1; /*--它的指针为-1 (即没有下一块)-*/}/*--修改长度-*/[fd].size = [fd].size+len;cur_dir->directitem[temp].size = cur_dir->directitem[temp].size+len;}return 0;}int read(int fd, char *buf){int len = [fd].size;char *first;int i, j, item;int ilen1, modlen;item = [fd].firstdisk;ilen1 = len/DISKSIZE;modlen = len%DISKSIZE;if(modlen!=0)ilen1 = ilen1+1; /*--计算文件所占磁盘的块数-*/first = fdisk+item*DISKSIZE; /*--计算文件的起始位置-*/for(i=0;i<ilen1;i++){if(i==ilen1-1) /*--如果在最后一个磁盘块-*/{for(j=0;j<len-i*DISKSIZE;j++)buf[i*DISKSIZE+j] = first[j];}else /*--不在最后一块磁盘块-*/{for(j=0;j<len-i*DISKSIZE;j++)buf[i*DISKSIZE+j] = first[j];item = fat[item].item; /*-查找下一盘块-*/first = fdisk+item*DISKSIZE;}}return 0;}int del(char *name){int i,cur_item,item,temp;for(i=2;i<MSD+2;i++) /*--查找要删除文件是否在当前目录中-*/{if(!strcmp(cur_dir->directitem[i].name,name))break;}cur_item = i; /*--用来保存目录项的序号,供释放目录中-*/if(i>=MSD+2) /*--如果不在当前目录中-*/return(-1);if(cur_dir->directitem[cur_item].property!='0') /*--如果删除的(不)是目录-*/ return(-3);for(i=0;i<MOFN;i++) /*--如果文件打开,则不能删除,退出-*/{if(!strcmp[i].name,name))return(-2);}item = cur_dir->directitem[cur_item].firstdisk;/*--该文件的起始盘块号-*/ while(item!=-1) /*--释放空间,将FAT表对应项进行修改-*/{temp = fat[item].item;fat[item].item = -1;fat[item].em_disk = '0';item = temp;}/*-----------------释放目录项-----------------------*/cur_dir->directitem[cur_item].sign = 0;cur_dir->directitem[cur_item].firstdisk = -1;strcpy[cur_item].name,"");cur_dir->directitem[cur_item].next = -1;cur_dir->directitem[cur_item].property = '0';cur_dir->directitem[cur_item].size = 0;return 0;}int mkdir(char *name){int i,j;struct direct *cur_mkdir;if(!strcmp(name,"."))return(-4);if(!strcmp(name,".."))return(-4);if(strlen(name)>8) /*-如果目录名长度大于8位-*/return(-1);for(i=2;i<MSD+2;i++) /*-如果有空闲目录项退出-*/{if(cur_dir->directitem[i].firstdisk==-1)break;}if(i>=MSD+2) /*-目录/文件已满-*/return(-2);for(j=2;j<MSD+2;j++) /*-判断是否有重名-*/{if(!strcmp(cur_dir->directitem[j].name,name))break;}if(j<MSD+2) /*-如果有重名-*/return(-3);for(j=ROOT_DISK_NO+1;j<DISK_NUM;j++) /*-找到空闲磁盘块j 后退出-*/ {if(fat[j].em_disk=='0')break;}if(j>=DISK_NUM)return(-5);fat[j].em_disk='1'; /*-将该空闲块设置为已分配-*//*-------------填写目录项----------*/strcpy(cur_dir->directitem[i].name,name);cur_dir->directitem[i].firstdisk=j;cur_dir->directitem[i].size=ROOT_DISK_SIZE;cur_dir->directitem[i].next=j;cur_dir->directitem[i].property='1';/*-所创目录在虚拟磁盘上的地址(内存物理地址)-*/cur_mkdir=(struct direct *)(fdisk+cur_dir->directitem[i].firstdisk*DISKSIZE); /*-初始化目录-*//*-指向当前目录的目录项-*/cur_mkdir->directitem[0].sign=0;cur_mkdir->directitem[0].firstdisk=cur_dir->directitem[i].firstdisk;strcpy(cur_mkdir->directitem[0].name,".");cur_mkdir->directitem[0].next=cur_mkdir->directitem[0].firstdisk;cur_mkdir->directitem[0].property='1';cur_mkdir->directitem[0].size=ROOT_DISK_SIZE;/*-指向上一级目录的目录项-*/cur_mkdir->directitem[1].sign=cur_dir->directitem[0].sign;cur_mkdir->directitem[1].firstdisk=cur_dir->directitem[0].firstdisk;strcpy(cur_mkdir->directitem[1].name,"..");cur_mkdir->directitem[1].next=cur_mkdir->directitem[1].firstdisk;cur_mkdir->directitem[1].property='1';cur_mkdir->directitem[1].size=ROOT_DISK_SIZE;for(i=2;i<MSD+2;i++) /*-子目录都初始化为空-*/{cur_mkdir->directitem[i].sign=0;cur_mkdir->directitem[i].firstdisk=-1;strcpy(cur_mkdir->directitem[i].name,"");cur_mkdir->directitem[i].next=-1;cur_mkdir->directitem[i].property='0';cur_mkdir->directitem[i].size=0;}return 0;}int rmdir(char *name){int i,j,item;struct direct *temp_dir;/*-检查当前目录项中有无该目录-*/for(i=2;i<MSD+2;i++){if(!strcmp(cur_dir->directitem[i].name,name))break;}if(i>=MSD+2) /*-没有这个文件或目录-*/return(-1);if(cur_dir->directitem[i].property!='1')/*-删除的不是目录-*/ return(-3);/*-判断要删除的目录有无子目录-*/temp_dir=(struct direct *)(fdisk+cur_dir->directitem[i].next*DISKSIZE);for(j=2;j<MSD+2;j++){if(temp_dir->directitem[j].next!=-1)break;}if(j<MSD+2) /*-有子目录或文件-*/return(-2);/*------------找到起始盘块号,并将其释放----------------*/item=cur_dir->directitem[i].firstdisk;fat[item].em_disk='0';/*-修改目录项-*/cur_dir->directitem[i].sign=0;cur_dir->directitem[i].firstdisk=-1;strcpy(cur_dir->directitem[i].name,"");cur_dir->directitem[i].next=-1;cur_dir->directitem[i].property='0';cur_dir->directitem[i].size=0;return 0;}void dir(){int i;for(i=2;i<MSD+2;i++){if(cur_dir->directitem[i].firstdisk!=-1) /*-如果存在子目录-*/{printf("%s\t",cur_dir->directitem[i].name);if(cur_dir->directitem[i].property=='0') /*-文件-*/printf("%d\t\t\n",cur_dir->directitem[i].size);elseprintf("\t<目录>\t\n");}}}int cd(char *name){int i,j,item;char *str;char *temp,*point,*point1;struct direct *temp_dir;temp_dir=cur_dir;str=name;if(!strcmp("\\",name)){cur_dir = root;strcpy(bufferdir,"Root:");return 0;}temp = (char *)malloc(DIR_MAXSIZE*sizeof(char));/*-最长路径名字分配空间-*/for(i=0;i<(int)strlen(str);i++)temp[i]=str[i];temp[i]='\0';for(j=0;j<MSD+2;j++) /*-查找该子目录是否在当前目录中-*/{if(!strcmp(temp_dir->directitem[j].name,temp))break;}free(temp);/*释放申请的临时空间*/roperty!='1') /*-打开的不是目录-*/irstdisk;/*-当前目录在磁盘中位置-*/temp_dir=(struct direct *)(fdisk+item*DISKSIZE);if(!strcmp("..",name)){if(cur_dir->directitem[j-1].sign!=1) /*-如果上级目录不是根目录-*/{point=strchr(bufferdir,'\\'); ize;i++){printf("%c",contect[i]);}printf("\t\n");}}show();break;case 6:' or '.' can not as the name of the direct!\n");}else if(flag == -5){printf("Error: \n The disk space is full!\n");}else if(flag == 0){printf("Successfully make dircet! \n");}show();break;case 8:序运行截图6.实验总结通过这一次计算机操作系统的上机实验,使我对不同环境下的操作系统有了进一步的了解,使我学到了很多关于Linux的操作和相关知识。
操作系统文件管理系统模拟实验
操作系统文件管理系统模拟实验操作系统文件管理系统模拟实验一、实验目的本实验旨在通过模拟操作系统的文件管理系统,加深对操作系统文件管理的理解,锻炼操作系统的应用能力。
二、实验环境1、操作系统:Windows/Linux/MacOS2、编程语言:C/C++/Java/Python等三、实验内容1、初始化文件管理系统1.1 创建根目录,并初始化空文件目录1.2 初始化用户目录和权限设置2、文件操作2.1 创建文件2.1.1 检查文件名合法性2.1.2 检查文件是否已存在2.1.3 为新文件分配磁盘空间2.1.4 添加文件元数据信息2.2 打开文件2.2.1 检查文件是否存在2.2.2 检查用户权限2.3 读取文件内容2.3.1 读取文件权限检查2.3.2 读取文件内容2.4 写入文件内容2.4.1 写入文件权限检查2.4.2 写入文件内容2.5 删除文件2.5.1 检查文件是否存在2.5.2 检查用户权限2.5.3 释放文件占用的磁盘空间2.5.4 删除文件元数据信息3、目录操作3.1 创建子目录3.1.1 检查目录名合法性3.1.2 检查目录是否已存在3.1.3 添加目录元数据信息3.2 打开目录3.2.1 检查目录是否存在3.2.2 检查用户权限3.3 列出目录内容3.3.1 列出目录权限检查3.3.2 列出目录内容3.4 删除目录3.4.1 检查目录是否存在3.4.2 检查用户权限3.4.3 递归删除目录下所有文件和子目录3.4.4 删除目录元数据信息四、实验步骤1、根据实验环境的要求配置操作系统和编程语言环境。
2、初始化文件管理系统,创建根目录,并初始化用户目录和权限设置。
3、进行文件操作和目录操作。
五、实验结果分析根据实验步骤进行文件操作和目录操作,观察系统的运行情况并记录相关实验结果。
六、实验结论通过本实验,深入了解了操作系统中文件管理系统的相关原理和实现方式,并且通过实验操作进一步巩固了相应的应用能力。
操作系统文件系统模拟课程设计实验报告
院系:计算机科学学院
专业:软件工程
年级: 2018级
课程名称:操作系统
指导教师:帖军
学号: 2018 姓名:惺惺惜惺惺
2020年 4 月 25 日
实验
分项1
文件系统模拟
实验目的能设计一个简单的多用户文件系统。
①在系统中用一个文件来模拟一个磁盘;②此系统至少有:Create、delete、open、close、read、write等和部分文件属性的功能。
③实现这个文件系统。
④能实际演示这个文件系统。
实验要求具体题目:文件系统模拟系统平台:Windows
实验原理步骤(算法流程)程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD、UFD),打开文件目录(AFD)即运行文件目录,如图所示。
文件系统结构如图所示。
操作系统文件系统模拟
实验报告课程名称操作系统实验名称文件系统存储空间管理模拟专业班级计1003 姓名崔代兵学号201007010307 实验日期6月13号成绩指导教师王潇潇一.实验题目文件系统存储空间管理模拟。
1. 模拟文件空间分配、释放过程,可选择连续分配、链式分配、索引分配方法;2. 文件空闲空间管理,可采用空白块链、空白目录、位示图方法;二.程序中所用的数据结构及说明typedef struct //CHR结构体{int C;int H;int R;}chr;typedef struct{char filename[10];//文件名chr CHR;//首个物理块CHR地址int blocknum;//块个数chr *indexTab;//索引表(为chr 类型的动态数组)}file;typedef struct node//文件目录结构体{file fi;//文件struct node *next;//下一节点}filecatalog;三.步骤1. 输入磁盘基本信息参数,计算位示图大小,并随机初始化位示图;(1)磁盘基本信息:磁盘柱面数m, 每柱面磁道数p, 每磁道物理块数q;(2)假设采用整数数组存放位示图,则数组大小为:Size= ceil((柱面数*每柱面磁道数*每磁道物理块数)/ (sizeof(int)*8))(3)申请大小为size的整数数组map,并对其进行随机初始化。
例如:假设m=2, p=4, q=8, 共有64个磁盘块,若sizeof(int)=2, 则位示图大小为4,map[4]如下:位示图中每一位对应的相对磁盘块号如下图,磁盘块号由小到大对应于数组的低地址到高地址位上。
即map[0]的第0位到第15位分别对应0号磁盘块到15号磁盘块的状态,map[1]的第0位到第15位对应16号磁盘块到31号磁盘块的状态,以此类推。
如上表所示, 29号磁盘的状态存在map[1]中,对应于第13位;2. 输出初始位示图信息;3. 输入文件分配或释放请求,(1)格式:“+ 文件名申请块数”或“ - 文件名”“+”表示申请文件分配,“-”表示删除文件如: + F1 54. 根据请求完成相应操作。
《操作系统结构分析》实验指导书v20(1)
《操作系统结构分析》实验指导书v20(1)南京邮电大学计算机学院信息安全系2007.10目录第1部分Linu某简明操作手册............................................................. . (1)1.1登录服务器(在Window远程登录Linu某服务器) (1)1.1.1登录FTP服务器............................................................. ..................11.1.2使用putty程序登录远程服务器.....................................................11.2vi简易手册............................................................. .....................................11.3gcc简易手册............................................................. . (2)1.3.1gcc简述............................................................. ................................21.3.2gcc的基本用法和选项............................................................. ........31.3.3如何用gcc进行代码调试............................................................. ...41.3.4gcc的错误类型及对策............................................................. .. (7)第2部分实验部分............................................................. .. (9)2.1实验一进程的创建与管道通信实验 (9)2.1.1实验目的............................................................. ...............................92.1.2实验环境............................................................. ...............................92.1.3实验原理............................................................. ...............................92.1.4实验内容............................................................. .............................102.1.5实验任务............................................................. .............................102.2实验二进程的同步和互斥实验 (1)32.2.1实验目的............................................................. .............................132.2.2实验环境............................................................. .............................132.2.3实验原理............................................................. .............................132.2.4实验内容............................................................. .............................152.2.5实验任务............................................................. .............................152.3实验三内存管理算法实验............................................................. . (19)2.3.1实验目的............................................................. .............................192.3.2实验环境............................................................. .............................192.3.3实验原理............................................................. .............................192.3.4实验内容............................................................. .............................202.3.5实验任务............................................................. .............................202.4实验四Linu某文件系统模拟实验 (22)2.4.1实验目的............................................................. .............................222.4.2实验环境............................................................. .............................222.4.3实验原理............................................................. .............................222.4.4实验内容............................................................. .............................242.4.5实验任务............................................................. .............................252.5实验五Window进程同步实验.. (26)2.5.1实验目的............................................................. .............................262.5.2实验环境............................................................. .............................262.5.3实验原理............................................................. .............................262.5.4实验内容..........................................................................................282.5.5实验任务............................................................. .. (28)第3部分实验报告............................................................. (29)第1部分Linu某简明操作手册1.1登录服务器(在Window远程登录Linu某服务器)1.1.1登录FTP服务器登陆步骤:1、点击“开始”→“运行”,输入“cmd”回车后进入COMMAND命令行状态;2、输入命令:ftpHotIP(HotIP:10.20.79.10);3、输入学号为用户名,密码亦为学号,成功后出现“ftp>”提示符;4、练习使用操作命令:1)l:列出当前目录下所有的文件和目录1.1.2使用putty程序登录远程服务器登陆步骤:1、在window环境里直接双击putty.e某e图标;用Window自带的telnet程序也可完成登陆过程,但是该程序运行和使用不如putty方便和稳定,所以推荐使用putty程序,telnet的使用过程与putty相似。
操作系统文件管理系统模拟实验
操作系统文件管理系统模拟实验1. 实验目的本实验旨在通过模拟操作系统的文件管理系统,深入理解操作系统中文件的组织结构、文件的创建、读写和删除操作,以及文件系统的管理策略。
2. 实验背景操作系统是计算机系统中的核心软件,负责管理计算机的资源并提供用户与计算机硬件之间的接口。
文件管理系统是操作系统的重要组成部分,用于管理计算机中的文件和目录结构,提供文件的读写、创建和删除等操作。
3. 实验环境本实验可以在任何支持操作系统模拟的计算机上进行,如使用虚拟机软件搭建的操作系统环境或在线操作系统模拟器。
4. 实验步骤4.1 文件系统初始化在模拟实验开始之前,需要对文件系统进行初始化。
可以选择创建一个空的文件系统或使用预先定义好的文件系统。
4.2 文件的创建在文件系统中创建一个新文件。
可以指定文件的名称、大小、属性等信息。
文件创建成功后,可以在文件系统中查看该文件的相关信息。
4.3 文件的读取选择一个已经存在的文件,并从文件系统中读取该文件的内容。
可以通过指定文件的路径或名称来进行读取操作。
读取文件时,可以选择按字节、按行或按块进行读取。
4.4 文件的写入选择一个已经存在的文件,并向该文件中写入内容。
可以选择覆盖原有内容或在文件末尾追加新内容。
写入文件时,可以选择按字节、按行或按块进行写入。
4.5 文件的删除选择一个已经存在的文件,并从文件系统中删除该文件。
删除文件后,文件系统中将不再存在该文件的相关信息。
5. 实验结果分析在完成实验步骤后,可以对实验结果进行分析和总结。
可以比较不同文件的读写操作所消耗的时间和资源,评估不同文件系统管理策略的性能优劣。
6. 实验注意事项6.1 在进行文件操作时,务必注意文件的权限和保护机制,避免误操作导致数据丢失或系统崩溃。
6.2 在进行文件读写操作时,要注意文件的大小和系统资源的限制,避免因为文件过大或系统资源不足而导致操作失败。
6.3 在进行文件删除操作时,要谨慎操作,避免误删重要文件或系统关键文件,导致系统无法正常运行。
文件系统模拟实验(C-实验教材)
文件系统实验1.1实验目的和要求1.1.1实验目的通常把文件与管理信息资源的管理程序的集合称为文件系统,它是操作系统中负责存取和管理信息资源的模块,采用统一的方法管理用户信息和系统信息的存储、检索、更新、共享和保护,并为用户提供一套行之有效的文件使用及操作方法。
本实验利用高级语言编写程序模拟文件系统,了解文件系统的基本结构和文件的各种操作方法,加深理解文件系统的内部功能及内部实现,从而帮助学生对各种文件操作命令的实质内容和执行过程有比较深入的了解。
1.1.2实验要求1.采用高级语言编写程序模拟文件系统,文件系统采用多级目录结构,实现对文件和目录的创建、删除、重命名、变更权限、显示文件内容、修改文件内容等操作。
2.撰写实验报告,报告应包含以下内容:(1)实验目的;(2)实验内容;(3)设计思路;(4)程序流程图;(5)程序中主要数据结构和函数说明;(6)带注释的源程序代码;(7)程序运行结果及分析(8)实验收获与体会1.2预备知识1.2.1文件和文件系统1.文件概念现代计算机系统中都配置了外存,大量的程序和数据以文件的形式存放在外存。
如果由用户直接管理文件,不仅要求用户熟悉外存特性,了解各种文件的属性,以及它们在外存上的位置,而且多用户环境下还必须能保持数据的安全性和一致性,这是用户不能胜任的。
因而,现代操作系统中都配备文件系统,以适应系统资源管理和用户使用信息的需要。
文件是指由创建者所定义的、具有文件名的一组相关元素的集合。
用户通过文件名就可对文件进行访问,文件名是由字母或数字组成的字母或数字串,其格式和长度都因系统而异。
操作系统提供文件系统的优点有:(1)便于用户使用。
(2)文件安全可靠。
(3)系统能有效利用存储空间,优化安排不同属主文件的位置。
(4)文件系统还能提供文件共享功能。
2.文件命名在不同的操作系统中对文件名的规定有所不同,文件名的格式和长度因系统而异。
一般来说,文件名由文件名和扩展名两部分组成,前者用于标识文件,后者用于区分文件类型,中间用“.”分割开来,它们都是字母或数字所组成的字母数字串。
操作系统文件管理系统模拟实验
操作系统文件管理系统模拟实验近年来,随着计算机技术的飞速发展,操作系统的重要性日益凸显。
作为计算机的核心软件之一,操作系统负责管理计算机的硬件和软件资源,提供良好的用户界面和文件管理功能。
为了更好地理解和掌握操作系统的文件管理系统,我们进行了一次模拟实验。
实验的目的是通过模拟操作系统的文件管理系统,深入了解文件的创建、读取、写入、删除等操作。
我们使用了一台虚拟机作为实验平台,并在其上安装了一个基于Linux的操作系统。
虚拟机的使用使得我们能够在一个相对封闭的环境中进行实验,不会对真实的计算机系统造成任何影响。
在实验开始之前,我们对文件管理系统的基本概念进行了学习和了解。
文件管理系统是操作系统中的一个重要模块,负责对计算机中的文件进行管理和控制。
它包括了文件的创建、读写、删除等功能,并提供了对文件进行组织和访问的接口。
了解这些基本概念对于我们后续的实验非常重要。
在实验过程中,我们首先进行了文件的创建和读写操作。
通过使用命令行界面,我们成功地创建了一个新的文件,并向其中写入了一些内容。
接着,我们使用读取命令来读取文件的内容,并验证了文件的创建和读写操作的正确性。
这一步的实验让我们更加熟悉了文件的创建和读写过程,加深了对文件管理系统的理解。
接下来,我们进行了文件的删除操作。
通过使用删除命令,我们成功地删除了之前创建的文件,并再次验证了删除操作的正确性。
文件的删除是文件管理系统中的一个重要操作,需要谨慎操作,以免误删重要文件。
通过这一实验,我们进一步加深了对文件管理系统的理解,并学会了正确地进行文件的删除操作。
除了基本的文件管理操作外,我们还进行了一些高级操作的实验。
比如,我们尝试了文件的复制和移动操作。
通过使用相应的命令,我们成功地将一个文件复制到了另一个目录,并将一个文件移动到了另一个目录。
这些高级操作的实验使我们更加熟悉了文件管理系统的各种功能和操作,提高了我们的操作技能。
通过这次模拟实验,我们对操作系统的文件管理系统有了更深入的了解和掌握。
文件系统模拟
文件管理系统模拟一、实验目的用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。
从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。
二、实验内容和要求要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令(至少4条)。
三算法及数据结构1、程序流程图main函数(即主目录下的操作)2.数据结构struct mfd{ //主文件目录char uname[12]; //用户名struct ufd *flink; //文件目录指针struct mfd *unext;}*mready=null,*mp,*ff;typedef struct mfd MFD;struct ufd{ //用户文件目录char fname[12]; //文件名int pcode ; //保护码int length; //文件长度struct ufd* fnext;}*uready=null,*np;typedef struct ufd UFD;struct afd{ //运行文件目录char openfname[12];//打开文件名int openpcode; //打开保护码int rpoint; //读指针int wpoint; //写指针}*arunning=null,*ap;typedef struct afd AFD;(1)创建文件void createfile(MFD *f) /*********************创建文件************************/{UFD *fp;fp=f->flink;if(fp==null){np=getpch(UFD);printf("创建文件");printf("\n\t\t\t\t文件名:");scanf("%s",np->fname);printf("\t\t\t\t保护码:");scanf("%d",&np->pcode);printf("\t\t\t\t文件长:");scanf("%d",&np->length);f->flink=np;np->fnext=null;}else{while(fp->fnext!=null){ fp=fp->fnext;}np=getpch(UFD);printf("创建文件");printf("\n\t\t\t\t文件名:");scanf("%s",np->fname);printf("\t\t\t\t保护码:");scanf("%d",&np->pcode);printf("\t\t\t\t文件长:");scanf("%d",&np->length);if(checkfile(np)) printf("\t\t\t\t相同文件已经存在,无法创建!\n"); else{fp->fnext=np;np->fnext=null;}}//fprint(f);}(2)删除文件/************************删除文件***************************/void fdelete(MFD *f){UFD *fp,*fq;char dename[12];printf("删除文件");fp=f->flink;if(fp==null){printf("\t\t\t\t没有文件可供删除!\n");}else{printf("\n\t\t\t\t文件名:");scanf("%s",dename);if(arunning!=null&&strcmp(dename,arunning->openfname)==0) { printf("\t\t\t\t文件正在使用中,不能删除!\n");goto end;}if(strcmp(dename,fp->fname)==0) {printf("\t\t\t\t删除文件<%s>成功!\n",dename);f->flink=fp->fnext;}else{fq=fp;fp=fp->fnext;if(fp==NULL)printf("\t\t\t\t文件名不存在\n");while(fp!=null){ if(strcmp(dename,fp->fname)==0){fq->fnext=fp->fnext;printf("\n\t\t\t\t删除文件<%s>成功!\n",dename);break;}fq=fq->fnext;fp=fp->fnext;if(fp==NULL)printf("\n\t\t\t\t文件名不存在\n");}}}end:;//fprint(f);}(3)打开文件/***********************打开文件***************************/void open(MFD *f){UFD *fp;char oname[12];int pc;fp=f->flink;if(fp==null){printf("\n\t\t\t\t没有文件可供打开!\n");}else{printf("\n\t\t\t\t文件名:");scanf("%s",oname);printf("\t\t\t\t保护码:");scanf("%d",&pc);while(fp!=null) {if((strcmp(oname,fp->fname)==0)&&(fp->pcode==pc)){ap=getpch(AFD);strcpy(ap->openfname,fp->fname);ap->openpcode=fp->pcode;ap->rpoint=0;ap->wpoint=fp->length;if(arunning==null) {arunning=ap;nowopenf(arunning);}else printf("\t\t\t\t正在打开文件,不允许同时运行两个文件!\n");break;}fp=fp->fnext;}if(arunning==null) printf("\t\t\t\t文件不存在!\n");}(4)写文件/********************写入文件**********************/void write(MFD *f){int len,i;UFD *fp;fp=f->flink;printf("写入文件");open(f);if((arunning->openpcode==1)||(arunning->openpcode==3)) {printf("\t\t\t\t文件不可写!\n");close();}else{ printf("\t\t\t\t写入内容长度:");scanf("%d",&len);printf("\t\t\t\t写入文件中....\n\t\t\t\t\t\t");for(i=arunning->wpoint;i<(arunning->wpoint+len);i++){printf("> ");Sleep(200);}arunning->wpoint=arunning->wpoint+len;while(fp!=null){ if(strcmp(arunning->openfname,fp->fname)==0){fp->length=arunning->wpoint;break;}fp=fp->fnext;}printf("\n\t\t\t\t写入完毕!\n");close();}}(5)读文件/*******************读取文件***********************/void read(MFD *f){printf("读取文件");open(f);if(arunning==null) goto end;if(arunning->openpcode==3) printf("\t\t\t\t文件不可读!\n");else{printf("\t\t\t\t读取文件中....\n");for((arunning->rpoint)=0;(arunning->rpoint)<(arunning->wpoint);(arunning-> rpoint)++){printf("\t\t\t\t\t\t>>>>>>>");Sleep(200);}printf("\n\t\t\t\t读取完毕!\n");}close();end:;}(6)插入用户到用户队列/*****************插入用户到用户队列*******************/void uinsert(){MFD *first,*second;if(mready==null){mp->unext=mready;mready=mp;}else{ first=mready;second=first->unext;while(second!=null){ first=first->unext;second=second->unext;}first->unext=mp;}usernum=usernum+1;//增加一个用户 }五、实验结果及分析1、运行结果(要求截图)(能动态说明执行结果)用户一级操作界面创建用户用户登录后二级操作界面创建文件a、b、c、d查看文件信息删除文件d 读取不存在文件r打开文件a 删除正在使用中的文件a读取文件b 写入不可写文件c写入可写文件b 查看文件信息关闭文件打开文件后关闭文件退回上一级界面2、实验结果的分析及说明根据界面提示操作,特别说明,对于命令操作create、delete、open、close、read、write用了选择数字按键操作。
操作系统试验模拟文件管理系统
操作系统试验摹拟文件管理系统一、引言文件管理是操作系统中的重要组成部份,它负责对计算机中的文件进行组织、存储和访问。
摹拟文件管理系统是为了更好地理解文件管理的原理和实现方式而设计的一个实验项目。
本文将详细介绍摹拟文件管理系统的设计和实现。
二、设计目标1. 实现基本的文件管理功能,包括文件的创建、删除、打开和关闭。
2. 实现文件的读写操作,包括顺序读写和随机读写。
3. 实现文件的共享和保护机制,确保多个进程可以同时对同一个文件进行读写操作。
4. 实现文件的索引和目录结构,方便文件的查找和管理。
5. 实现文件的存储管理,包括空暇空间管理和磁盘分配算法。
三、系统设计1. 文件的创建和删除在摹拟文件管理系统中,可以通过命令行或者图形界面来创建和删除文件。
创建文件时,系统会为该文件分配一个惟一的文件标识符,并在文件目录中记录该文件的相关信息。
删除文件时,系统会释放该文件占用的存储空间,并从文件目录中删除该文件的记录。
2. 文件的打开和关闭在摹拟文件管理系统中,可以通过命令行或者图形界面来打开和关闭文件。
打开文件时,系统会根据文件标识符在文件目录中查找该文件的相关信息,并将该文件的描述符返回给用户进程。
关闭文件时,系统会释放该文件的描述符,并更新文件的相关信息。
3. 文件的读写操作在摹拟文件管理系统中,可以通过命令行或者图形界面来进行文件的读写操作。
顺序读写是指按照文件的存储顺序挨次读取或者写入文件的内容,而随机读写是指根据文件的索引或者偏移量来读取或者写入文件的内容。
系统会根据用户进程的读写请求,将相应的数据从磁盘中读取或者写入到内存中。
4. 文件的共享和保护机制在摹拟文件管理系统中,多个进程可以同时对同一个文件进行读写操作。
系统会通过锁机制来实现文件的共享和保护。
当一个进程正在对文件进行读写操作时,其他进程需要等待该进程释放文件的锁才干对文件进行读写操作。
同时,系统还可以设置文件的访问权限,确保惟独具有相应权限的进程才干对文件进行读写操作。
操作系统实验四 文件系统实验
return
scanf("%s",s); strcpy(t->fileName,s); printf("\n 请输入该文件基本信息:"); scanf("%s",s); strcpy(t->file,s); t->brother=t->child=NULL; if(p->child==NULL) {
goto label; } p=p->next; } printf("文件不存在!\n"); goto label; } else if(i==8) { show(f); goto label; } else { goto label; } } void Select() { char username[20]; int i; printf("请输入用户名:\n"); scanf("%s",username); for(i=0; i<userNum; i++) { if(!strcmp(mdf[i].userName,username)) { fp= mdf[i].p; if(fp!=NULL) {
printf("该用户已创建文件:\n"); while(fp!=NULL) {
fp=fp->next; printf("%s\n",fp->fileName); } } else { printf("该用户尚未创建任何文件!\n"); } fp= mdf[i].p; Operation(fp); }
#include <stdio.h> #include <stdlib.h> #include <string.h> #define getpch(type) (type*)malloc(sizeof(type)) int userNum=0;
操作系统试验模拟文件管理系统.doc
操作系统试验模拟文件管理系统.doc.【实验报告正文】一、实验目的和要求(必填)实验目的:通过在VC 平台下编程,设计和调试一个简单的文件系统,通过模拟文件操作命令的执行,来模拟文件系统对文件及目录的管理。
实验要求:两名学生成组结对完成实验,仿真出文件系统中对文件和目录的操作。
二、实验内容(必填)文件管理:实现一个简单的文件系统三、实验原理或实验方法(必填)装原理:通过结构体来描述文件和目录,利用链表知识实现目录树结构,通过对链表的操作实现整个文件系统中目录和文件的相关操作。
订方法:学生两人结对进行实验,分别实现对文件和目录的操作。
线对文件的操作包括:创建文件create、读文件read、写文件write 、删除文件 delete。
对目录的操作包括:创建目录mkdir 、切换目录 cd、展示目录内容 dir 、删除目录 rm。
四、主要仪器设备或实验条件Windows 操作系统, VC 开发环境五、实验步骤(含实验数据记录处理)或操作设计过程记录#include "stdio.h"#include "iostream.h"#include "string.h"#define FILENAME_LENGTH 10 //文件名称长度#define COMMAND_LENGTH 10// 命令行长度#define PATH_LENGTH 30//参数长度struct filenode{char filename[FILENAME_LENGTH];int isdir;char content[255];filenode *parent;filenode *child;filenode *prev;filenode *next;};filenode *initnode(char filename[],int isdir);void createroot();int run();int findpath(char *topath);void help();int mkdir();int create();int read();int write();int del();int rm();int cd();int dir();filenode *root,*recent,*temp,*ttemp,*temp_child;charpath[PATH_LENGTH],command[COMMAND_LENGTH],temppath[PATH_LENGTH],rece ntpath[PATH_LENGTH];//创建文件或目录的存储节点filenode* initnode(char filename[],int isdir){filenode *node=new filenode;strcpy(node->filename,filename);node->isdir=isdir;node->parent=NULL;node->child=NULL;node->prev=NULL;node->next=NULL;return node;}//初始化文件系统根结点void createroot (){recent=root=initnode("/",1);root->parent=NULL;root->child=NULL;root->prev=root->next=NULL;strcpy(path,"/");}void help(){cout<<endl;< bdsfid="140" p=""></endl;<>cout<<"create:建立文件。