山东英才学院计算机电子信息工程学院实验报告成绩________ 课程名称计算机操作系统指导教师实验日期院(系)专业班级实验地点学生姓名学号实验项目名称实验六目录管理计算机电子信息工程学院实验报告(附页)实验数据记录、处理及结果分析如下:实验六文件目录管理第 2 页共 14 页山东英才学院代码如下:#include "stdio.h"#include "conio.h"#include "stdlib.h"#include "string.h"#define L 6 /* 用户最多保存的文件数 */ #define N 5 /* 系统可同时管理的用户数*/ 实验六文件目录管理第 4 页共 14 页山东英才学院 char MFD[N][20]={"abc","xyz"};int U;static int memo[128]={10,20,30,40,50,60,70,80,90};/*用户文件目录*/struct FCB{ char filename[20];/*文件名*/char access;/*文件属性*/int length;/*记录长度*/int flag;/*文件状态*/int write;int address[5];/*文件地址*/int p[5];};/*用户已打开文件表*/struct UOF{ char filename[20];/*文件名*/char access;/*文件属性*/int length;/*记录长度*/int flag;/*状态*/int write;/*写指针*/int cre_clo; /*1 is creat;0 is close*/};struct FCBUFD[N][L] ={{{"a.txt",'w',3,1,3,{10,20,30},{10,20,30}},{"b.txt",'r',3,1,3,{40,50,60},{40,50,60}}},{{"c.txt",'w',3,1,3,{70,80,90},{70,80,90}}}};struct UOF UOF[20];/*建立文件函数*/void creat(){ int j,le,i,address;int m;char s[20];char ac;printf("请输入文件名\n");scanf("%s",s);for(j=0;j<L;j++)if(strcmp(UFD[U][j].filename,s)==0){printf("文件名相同,不能创建!\n");break; }if(j==L){ printf("文件长度:\n");scanf("%d",&le);getchar();printf("文件属性:\n");scanf("%c",&ac);getchar();printf("请输入第一个地址\n");scanf("%d",&address);for(j=0;j<128;j++){if(memo[j]==0){ memo[j]=address;break; }}UFD[U][j].address[0]=address;UFD[U][j].p[0]=UFD[U][j].address[0] ; for(i=0;i<L;i++){if(UFD[U][i].flag==0){ strcpy(UFD[U][i].filename,s ); UFD[U][i].access=ac;UFD[U][i].length=le;实验六文件目录管理第 6 页共 14 页山东英才学院 UFD[U][i].flag=1;UFD[U][i].address[0]=address;m=i; break;}}for(i=0;i<5;i++)if(UOF[i].flag==0){ strcpy( UOF[i].filename,s) ;UOF[i].length=le;UOF[i].access=ac;UOF[i].cre_clo=1;UOF[i].flag=1;break;}printf("\n文件创建成功!\n");}}/*关闭文件函数*/void close(char name[20]){ int i;for(i=0;i<L;i++)if(strcmp(UOF[i].filename,name)==0){UOF[i].cre_clo=0;strcpy(UOF[i].filename,"");UOF[i].access=' ';UOF[i].length =0;UOF[i].write =0;UOF[i].flag=0;printf("文件成功关闭\n");break;}}/*打开文件函数*/void open(){ char na[20];char c;int x,m,j,i;printf("请输入要打开的文件名 \n");getchar();gets(na) ;printf("你想对文件进行写还是读操作?\n"); c=getchar();getchar();for(i=0;i<L;i++){if(strcmp(UFD[U][i].filename,na)==0){ m=i;for(j=0;j<20;j++){if(strcmp(UOF[j].filename,na)==0){ if(UOF[j].cre_clo==1){printf("文件正在被创建\n");break;}else{ printf("文件已经打开\n");break;}}}if(j==20){if(UFD[U][m].access==c){for(x=0;x<20;x++)实验六文件目录管理第 8 页共 14 页山东英才学院 if(UOF[x].flag==0){ strcpy(UOF[x].filename,UFD[U][m].filename);UOF[x].length=UFD[U][m].length;UOF[x].access=UFD[U][m].access;UOF[x].cre_clo=0;UOF[x].flag=1;UOF[x].write=UFD[U][m].write;printf("文件打开成功\n");break;}}else{printf("操作错误\n");} }break; }}if(i==L){printf("文件不存在!\n");}}//////////*写文件函数*/void write(){char nam[20];int i,j,n,b,x,t,e,k; int a; int m;static int ad[5];printf("请输入要进行写操作的文件名 \n");getchar();gets(nam);for(x=0;x<6;x++){ if(strcmp(UFD[U][x].filename,nam)==0){ a=x;/* for(r=0;r<5;r++)printf("===%d====\n",UFD[U][a].address[r]); */for(i=0;i<20;i++){if(strcmp(UOF[i].filename,nam)==0){if(UOF[i].cre_clo==1&&UFD[U][a].access!='r'){ m=i;for(e=1;e<UFD[U][a].length;e++){printf("输入地址%d\n",e);scanf("%d",&ad[e]);for(k=0;k<20;k++)if(ad[e]==memo[k]){printf("the address%d is wrong and input another one\n",e); scanf("%d",&ad[e]); break;}for(j=0;j<20;j++){if(memo[j]==0){ memo[j]=ad[e];break; }}UFD[U][a].address[e]=ad[e];}UFD[U][a].p[1]=UFD[U][a].address[1];UFD[U][a].p[2]=UFD[U][a].address[2];UFD[U][a].p[3]=UFD[U][a].address[3];UFD[U][a].p[4]= UFD[U][a].address[4];/*for(j=0;j<5;j++)实验六文件目录管理第 10 页共 14 页山东英才学院printf("==%d==\n", UFD[U][a].address[j]) ; */{for(j=0;j<UFD[U][a].length;j++)UFD[U][a].p[UOF[m].write++]=UFD[U][a].address[j];}for(j=0;j<UFD[U][m].length;j++){if(UFD[U][a].address[j]!=0)UFD[U][a].write++;}break; }else{if(UFD[U][x].access=='r'){printf("the file can not be write\n");break; } else{printf("do you want to modify in sequence or not 1/0?\n");scanf("%d",&n);if(n==1){for(e=0;e<UFD[U][x].length;e++){printf("input address%d\n",e+1);scanf("%d",&ad[e] );for(k=0;k<128;k++){if(ad[e]==memo[k]){ printf("the address%d is wrong and input another one\n",e);scanf("%d",&ad[e]); break;}}for(j=0;j<128;j++){if(memo[j]==0){memo[j]=ad[e];break;}}}for(t=0;t<5;t++){UFD[U][x].address[t]=ad[t];}for(t=0;t<5;t++)UFD[U][x].p[t]=UFD[U][x].address[t] ;printf("write successfully");break;}else{printf("which record do you want to modify?\n"); scanf("%d",&b);printf("the %d record is %d",b,UFD[U][x].p[b]); printf("\ninput the new address\n");for(j=0;j<L;j++){ if(UFD[U][x].p[b]==UFD[U][x].address[j]){ scanf("%d",&UFD[U][x].address[j]);break;} }printf("write successfully\n");break;}}} } }if(i==20)printf("the file is not be opened\n");break; } }if(x==6){printf("the file is not be created \n");}}实验六文件目录管理第 12 页共 14 页山东英才学院/*显示函数*/void print_UFD(){ int i ;printf("num filenameaccess length flag ad1 ad2 ad3 ad4 ad5 \n ");for(i=0;i<5;i++){printf("\n%d\t%s\t%c\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",i,UFD[U][i].filename,UFD[U][i].access,UFD[U][i].length,UFD[U][i].flag,UFD[U][i].address[0],UFD[U][i].address[1],UFD[U][i].address[2],U FD[U][i].address[3],UFD[U][i].address[4]);}}void print_UOF(){ int i;printf("num filename access length flag write cre_clo \n ");for(i=0;i<5;i++){ printf("\n%d\t%s\t%c\t%d\t%d\t%d\t%d\n",i,UOF[i].filename,UOF[i].access,UOF[i].length,UOF[i].flag,UOF[i].write,UOF[i].cre_clo);}}void main(){ char name[20]; char na[20];int i,a;printf("please welcome to file mangment .\n");printf("\nplease input the user\n") ;scanf("%s",name); getchar();for(i=0;i<N;i++){ if(strcmp(MFD[i],name)==0){ U=i;while(1){printf("\n-----------weclome-------------\n");printf("1:creat file.\n");printf("2:open file .\n");printf("3:write file.\n") ;printf("4:close file.\n");printf("5:print file-UFD\n");printf("6:print file-UOF\n");printf("0:exit.\n");printf("-------------------------------\n");printf("\nplease input your choice\n");scanf("%d",&a);switch(a){ case 1:creat(); break;case 2: open();break;case 3: write();break;case 4:printf("input the filename you want to close \n"); scanf("%s",na);close(na);break;case 5: print_UFD();break;case 6: print_UOF();break;case 0:exit(0);default:break;}}}}if(i==N)printf( "\nthe user is not exist\n" ) ;}实验六文件目录管理第 14 页共 14 页。