实验四: 文件管理(含截图及代码分析)

合集下载

文件管理实验报告

文件管理实验报告

文件管理实验报告一、实验目的本次文件管理实验旨在深入了解和掌握文件管理的基本原理和操作方法,提高对文件系统的认识和运用能力,培养良好的文件管理习惯,以提高工作和学习的效率。

二、实验环境操作系统:Windows 10应用软件:资源管理器三、实验内容及步骤(一)文件的创建与命名1、打开资源管理器,选择合适的存储位置(如桌面、D 盘等)。

2、右键单击空白处,选择“新建”,然后根据需要创建文本文档、Word 文档、Excel 表格等不同类型的文件。

3、为创建的文件进行合理的命名,遵循简洁、清晰、有意义的原则,避免使用模糊、无意义或过长的文件名。

(二)文件的复制、移动与删除1、复制文件选中要复制的文件,按下Ctrl +C 组合键或右键单击选择“复制”。

导航到目标位置,按下 Ctrl + V 组合键或右键单击选择“粘贴”。

2、移动文件选中要移动的文件,按下Ctrl +X 组合键或右键单击选择“剪切”。

导航到目标位置,按下 Ctrl + V 组合键或右键单击选择“粘贴”。

3、删除文件选中要删除的文件,按下 Delete 键或右键单击选择“删除”。

在弹出的确认对话框中,选择“是”确认删除。

(三)文件的搜索与查找1、利用资源管理器的搜索功能,在搜索框中输入文件名、关键词或文件类型等信息,快速找到所需文件。

2、学会使用高级搜索选项,如指定搜索范围、修改时间、文件大小等条件,进一步精确搜索结果。

(四)文件的分类与整理1、根据文件的类型(如文档、图片、音频、视频等)、用途(工作、学习、娱乐等)或项目等进行分类。

2、创建不同的文件夹来存放各类文件,并为文件夹进行清晰的命名。

3、将相关文件移动到对应的文件夹中,保持文件系统的整洁和有序。

(五)文件的备份与恢复1、选择重要的文件或文件夹,将其复制到外部存储设备(如 U 盘、移动硬盘)或云存储服务(如百度网盘、OneDrive)中进行备份。

2、模拟文件丢失或损坏的情况,从备份中恢复文件,验证备份的有效性。

文件管理实验报告

文件管理实验报告

文件管理实验报告一、实验目的本次文件管理实验的主要目的是深入了解和掌握文件管理的基本原理和操作方法,通过实际操作和观察,提高对文件系统的认识和运用能力,培养良好的文件管理习惯,以提高工作和学习的效率。

二、实验环境本次实验使用的操作系统为 Windows 10,使用的工具包括资源管理器、命令提示符等。

三、实验内容与步骤(一)文件和文件夹的创建与命名1、打开资源管理器,选择合适的磁盘分区和文件夹。

2、右键单击空白处,选择“新建”,然后分别创建文本文件、Word 文档、文件夹等。

3、为创建的文件和文件夹进行合理的命名,遵循清晰、简洁、有意义的原则,例如“学习资料_数学”“工作周报_202309”等。

(二)文件和文件夹的复制、移动与删除1、选中要操作的文件或文件夹,可以使用鼠标左键单击或按住Ctrl 键进行多选。

2、对于复制操作,右键单击选中的对象,选择“复制”,然后在目标位置右键单击选择“粘贴”。

3、移动操作类似,只是选择“剪切”而不是“复制”。

4、删除文件或文件夹时,选中对象后按下 Delete 键,或者右键单击选择“删除”。

需要注意的是,删除操作是不可逆的,对于重要文件要谨慎操作。

(三)文件和文件夹的属性设置1、右键单击文件或文件夹,选择“属性”。

2、在属性对话框中,可以设置文件的只读、隐藏等属性。

3、了解文件的大小、创建时间、修改时间等信息。

(四)文件的搜索与查找1、在资源管理器的搜索框中输入关键词,如文件名、文件内容中的部分文字等。

2、可以设置搜索范围、搜索条件等,以更精确地找到所需文件。

(五)文件的压缩与解压缩1、选择要压缩的文件或文件夹,右键单击选择“添加到压缩文件”。

2、可以设置压缩格式、压缩级别等参数。

3、对于压缩文件,右键单击选择“解压到当前文件夹”或“解压到指定文件夹”进行解压缩操作。

四、实验中遇到的问题及解决方法(一)问题 1:误删除重要文件在进行删除操作时,不小心删除了一个包含重要数据的文件夹。

实验四 文件管理

实验四 文件管理

实验四文件管理班级:姓名:学号:【实验目的】通过调试并运行一个简单的文件系统来模拟文件操作命令的执行、模拟文件管理,使学生对主要文件操作命令的实质和执行过程有比较深入的了解,掌握它们的基本实施方法。

【实验要求】了解该系统的文件管理方案、数据结构、文件目录的建立与删除;理解系统在运行过程中显示的状态和有关参数变化情况的意义。

具体要求为:(1)了解一个支持n个用户的文件系统,每个用户可拥有多个文件。

(2)理解二级和多级文件目录管理。

(3)了解文件存取控制保护方式。

(4)了解常见的文件操作命令。

【实验环境】具备Windows或MS-DOS操作系统、带有Turbo Pascal集成环境的PC机。

【实验重点及难点】重点:理解文件管理的基本概念,文件管理中主要数据结构的设计和文件管理中文件、目录的建立和删除等算法的实现。

难点:实验程序的问题描述、实现算法、数据结构。

【实验内容】一.阅读实验程序文件管理模拟程序代码见【实验例程】。

二.编译实验例程用Turbo Pascal编译实验例程。

三.运行程序并对照实验源程序阅读理解实验中输入、输出的意义。

【实验例程】program filesystem;uses crt;const openf:integer=0;type str=string[6];linku=^datau;datau=recordfilename:str;pcode:integer;length:integer;addr:integer;next:linku;end;linkm=^datam;datam=recordusername:str;link:linku;end;linka=^dataa;dataa=recordfilename:str;pcode:integer;rpointer:integer;wpointer:integer;addr:integer;next:linka;end;varmfd:array[1..5]of linkm;p1,q1:linkm;p2,q2:linku;afd,p3,q3:linka;x,y1:str;i,y:integer;f:boolean;code:integer;procedure init;label a;beginclrscr;for i:=1to10do writeln;writeln('':25,'WELCOME TO OUR FILE SYSTEM!');writeln;writeln;writeln('':27,'Please press space bar!');repeat until readkey='';clrscr;a:write('User number?');readln(y1);val(y1,y,code);If code<>0then goto a;if y>5thenbeginwriteln('Users too many!(<=5)');goto a;end;writeln('Begin users login:');for i:=1to y dobeginwrite('User name',i,'?');readln(x);new(mfd[i]);mfd[i]^.username:=x;new(p2);p2^.next:=NIL;p2^.filename:='';mfd[i]^.link:=p2;end;if y<5thenfor i:=y+1to5domfd[i]:=NIL;new(afd);afd^.next:=NIL;afd^.filename:='';end;procedure pcreate;label a,b;beginwrite('User name?');readln(x);for i:=1to5doif x=mfd[i]^.username then goto b;writeln(x,'not been logined!');goto a;b:write('New file name?');readln(x);p2:=mfd[i]^.link;while p2^.next<>NIL do p2:=p2^.next;new(q2);q2^.next:=NIL;q2^.filename:='';p2^.next:=q2;p2^.filename:=x;repeat write('Protection code?');readln(y1);val(y1,y,code);until code=0;p2^.pcode:=y;p2^.length:=0;writeln('Create finished!');a:end;procedure popen;label a,b;beginwrite('Filename?');readln(x);for i:=1to5dobeginp2:=mfd[i]^.link;while(x<>p2^.filename)and(p2^.next<>NIL)do p2:=p2^.next;if x=p2^.filename then goto a;end;writeln('The file not been created!');goto b;a:if openf<5thenbeginopenf:=openf+1;q3:=afd;while q3^.next<>nil do q3:=q3^.next;new(p3);q3^.next:=nil;q3^.next:=p3;q3^.filename:=x;q3^.pcode:=p2^.pcode;q3^.rpointer:=0;q3^.wpointer:=0;writeln('Open finished!');endelse writeln('Open files too many!');b:end;procedure close1(t:integer);beginwrite('Filename?');readln(x);q3:=afd;i:=1;while(q3^.filename<>x)and(q3^.next<>nil)dobeginp3:=q3;q3:=q3^.next;end;i:=i+1;if q3^.filename=x thenbeginif q3=afd thenafd:=q3^.nextelsep3^.next:=q3^.next;openf:=openf-1;dispose(q3);if t=0then writeln('Close finished!');endelse if t=0thenwriteln('The file not been opened!');end;procedure pcolse;const t:integer=0;beginclose1(t);end;procedure pdelete;const t:integer=1;label a,b;beginclose1(t);for i:=1to5dobeginp2:=mfd[i]^.link;while(x<>p2^.filename)and(p2^.next<>nil)dobeginq2:=p2;p2:=p2^.next;end;if p2^.filename=x then goto a;end;writeln('The file not exist!1');goto a;a:if p2=mfd[i]^.link then mfd[i]^.link:=p2^.next else q2^.next:=p2^.next;dispose(p2);writeln('Delete finished!');b:end;procedure pread;beginwrite('The procedure has not exist!');end;procedure pwrite;beginwriteln('The procedure has not exist!');end;procedure pdirectory;label a,b;var c:char;j,n:integer;beginwrite('Main or user directory?(m/u)');readln(c);if c='m'thenbeginwriteln('Main File Directory');writeln('---------------------------------------');writeln('user_name file_number');j:=0;n:=0;for i:=1to5dobeginif mfd[i]=nil then goto b;write(mfd[i]^.username);p2:=mfd[i]^.link;while p2^.next<>nil dobeginj:=j+1;p2:=p2^.next;end;n:=n+j;writeln('':14,j);j:=0;end;b:writeln('total','':10,n)endelsebeginwrite('User name?');readln(x);for i:=1to5dobeginif mfd[i]^.username=x thenbeginwriteln('',x,'file directory');writeln('-------------------------------------------');writeln('Filename protection code length');p2:=mfd[i]^.link;while p2^.next<>nil dobeginwriteln('',p2^.filename,'':9,p2^.pcode,'':13,p2^.length);p2:=p2^.next;end;goto a;end;end;writeln('The directory not exist!');end;a:end;begininit;f:=true;while f dobeginrepeatwriteln;writeln;writeln('':27,'main menu');writeln('':15,'------------------------------------------------------------');writeln('':15,'||');writeln('':15,'| 1.create 2.open 3.close|');writeln('':15,'||');writeln('':15,'| 4.delete 5.read 6.write|');writeln('':15,'||');writeln('':15,'|7.driectory8.quit|');writeln('':15,'||');writeln('':15,'-----------------------------------------------------------') ;write('':17,'Which?');readln(y1);val(y1,y,code);until code=0;case y of1:pcreate;2:popen;3:pcolse;4:pdelete;5:pread;6:pwrite;7:pdirectory;8:halt;end;end;end.【问题与讨论】1、该文件模拟系统目录结构的特点?答:该文件采用文件系统的树形结构进行文件管理。

国开 操作系统 实验4:文件管理实验

国开 操作系统 实验4:文件管理实验

实验4:文件管理实验
一、目的:
1、加深对文件、目录、文件系统等概念的理解。

2、掌握Linux 文件系统的目录结构。

3、掌握有关Linux 文件系统操作的常用命令。

4、了解有关文件安全性方面的知识。

二、条件:
需要一个Linux的环境
1、在Win10系统启用Linux子系统
2、在Win10应用商店安装Ubuntu应用
3、
三、过程:
1、浏览文件系统
用到pwd、ls、mkdir、cd命令
不带参数的cd命令,工作目录回到了用户的默认目录
cd ../.. 执行后,工作目录回到了/根目录
2、查看文件
用到data、head、tail、ls、man、date、cp、mv、rm命令
man date
建立链接后第2个字段从1变成2
3、文件查找和目录
用到了find、grep命令
4、修改文件存取权限
chmod命令
四、总结:Linux是一个多用户的现代操作系统,提供了丰富和强大的文件管理的命令。

掌握这些命令对于我们深入Linux学习是必需的。

实验四 文件管理实验

实验四  文件管理实验

实验四文件管理实验◆实验名称:文件管理实验◆仪器、设备:计算机◆参考资料:操作系统实验指导书◆实验目的:设计一个n个用户的文件系统,用户在一次运行中只能打开一个文件,有Create、delete、open、close、read、write等命令。

◆实验内容:为DOS系统设计一个简单的二级文件系统。

要求可以实现下列几条命令CREATE 创建文件DELETE 删除文件OPEN 打开文件CLOSE 关闭文件READ 读文件WRITE 写文件◆实验原理、数据(程序)记录:#define MAXNAME 25 /*the largest length of mfdname,ufdname,filename*/#define MAXCHILD 50 /*the largest child*/#define MAX (MAXCHILD*MAXCHILD) /*the size of fpaddrno*/void CreateF() /*Create File*/{int fpaddrno,flag=1,i;char fname[MAXNAME],str[50],str1[50],strtext[255],a[25];char fmode[25];int FindPANo(); /*find out physical address num*/int WriteF1(); /*write file*/int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/int ExistD(char *dirname);if (strcmp(strupr(dirname),strupr(username))!=0){printf("\nError. You must create file in your own dir.\n");wgetchar=1;}else{ printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));if (ExistF(fname)>=0){printf("\nError. Name \'%s\' has already existed.\n",fname);wgetchar=1;} else{printf("Please input FileMode(0-Read Only, 1-Write Only, 2-Read and Write, 3-Protect):");gets(fmode);ltrim(rtrim(fmode));if((strcmp(fmode,"0")==0)||(strcmp(fmode,"1")==0)||(strcmp(fmode,"2")==0)||(strcmp(fmode ,"3")==0)){fpaddrno=FindPANo();if (fpaddrno>=0){i=ExistD(username);strcpy(ufd[i]->ufdfile[fcount[i]].fname,fname);ufd[i]->ufdfile[fcount[i]].fpaddr=fpaddrno;ufd[i]->ufdfile[fcount[i]].fmode=atoi(fmode);ifopen[i][fcount[i]].ifopen=0;ifopen[i][fcount[i]].openmode=4;strcpy(str,"c:\\osfile\\file\\file");itoa(fpaddrno,str1,10);strcat(str,str1);fp_file=fopen(str,"wb");fclose(fp_file);fcount[i]++;while(flag){printf("Input text now(Y/N):");gets(a);ltrim(rtrim(a));ufd[i]->ufdfile[fcount[i]-1].flength=0;if(strcmp(strupr(a),"Y")==0){fp_file=fopen(str,"wb+");ufd[i]->ufdfile[fcount[i]-1].flength=WriteF1();flag=0;} else if(strcmp(strupr(a),"N")==0){flag=0;wgetchar=1;}} printf("\n\'%s\' has been created successfully!\n",fname);} else{printf("\nFail!No Disk Space. Please format your disk.\n");wgetchar=1;}} else {printf("\nError. FileMode\'s Range is 0-3\n");wgetchar=1;}}}}int ExistF(char *filename) /*Whether FileName Exist,Exist-i,Not Exist-0*/{int i,j;int exist=0;int ExistD(char *dirname);j=ExistD(dirname);for(i=0;i<fcount[j];i++)if (strcmp(strupr(ufd[j]->ufdfile[i].fname),strupr(filename))==0){exist=1;break;}if (exist) return(i);else return(-1);}int FindPANo() /*find out physical address num*/{int i;for(i=0;i<MAX;i++)if (fpaddrno[i]==0) {fpaddrno[i]=1;break;}if (i<MAX) return(i);else return(-1);}int WriteF1() /*write file*/{int length=0;char c;printf("Please input text(\'#\' stands for end):\n");while((c=getchar())!='#'){fprintf(fp_file,"%c",c);if (c!='\n') length++;} fprintf(fp_file,"\n");fclose(fp_file);return(length);}******************************************************************************* void DeleteF() /*Delete File*/{char fname[MAXNAME];char str[50],str1[50];int i,j,k,flag=1;char a[25]; /*whether delete*/char *rtrim(char *str); /*remove the trailing blanks.*/char *ltrim(char *str); /*remove the heading blanks.*/int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/int ExistD(char *dirname);if (strcmp(strupr(dirname),strupr(username))!=0){printf("\nError. You can only delete file in your own dir.\n");wgetchar=1;}else{printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if (i>=0){k=ExistD(username);if(ifopen[k][i].ifopen==1){printf("\nError. \'%s\' is in open status. Close it before delete.\n",fname);wgetchar=1;}else{while(flag){printf("\'%s\' will be deleted. Are you sure(Y/N):",fname);gets(a);ltrim(rtrim(a));if(strcmp(strupr(a),"Y")==0){fpaddrno[ufd[k]->ufdfile[i].fpaddr]=0;itoa(ufd[k]->ufdfile[i].fpaddr,str,10);for(j=i;j<fcount[k]-1;j++){strcpy(ufd[k]->ufdfile[j].fname,ufd[k]->ufdfile[j+1].fname);ufd[k]->ufdfile[j].fpaddr=ufd[k]->ufdfile[j+1].fpaddr;ufd[k]->ufdfile[j].flength=ufd[k]->ufdfile[j+1].flength;ufd[k]->ufdfile[j].fmode=ufd[k]->ufdfile[j+1].fmode;ifopen[k][j]=ifopen[k][j+1];}fcount[k]--;strcpy(str1,"c:\\osfile\\file\\file");strcat(str1,str);remove(str1);flag=0;printf("\n\'%s\' has been deleted successfully.\n",fname);wgetchar=1;}else if(strcmp(strupr(a),"N")==0){printf("\nError. \'%s\' hasn\'t been deleted.\n",fname);wgetchar=1;flag=0;}}}}else {printf("\nError. \'%s\' does not exist.\n",fname);wgetchar=1;}}}******************************************************************************* void OpenF() /*Open File*/{char fname[MAXNAME];char str[25],str1[25],fmode[25];int i,k;char *rtrim(char *str); /*remove the trailing blanks.*/char *ltrim(char *str); /*remove the heading blanks.*/int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/int ExistD(char *dirname);if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0){printf("\nError. Please change to ufd dir before open.\n");wgetchar=1;return;}printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if (i>=0){k=ExistD(dirname);if(!ifopen[k][i].ifopen){if (ufd[k]->ufdfile[i].fmode==3){printf("\nError. The file\'s mode is FORBID. Can not open.\n");wgetchar=1;}else{printf("Please input FileOpenMode(0-Read Only,1-Write Only,2-Read and Write):");gets(fmode);ltrim(rtrim(fmode));if((strcmp(fmode,"0")==0)||(strcmp(fmode,"1")==0)||(strcmp(fmode,"2")==0)){if(fmode[0]=='0') /*open file with read only mode*/{strcpy(str,"read only");if((ufd[k]->ufdfile[i].fmode==0)||(ufd[k]->ufdfile[i].fmode==2)) ifopen[k][i].ifopen=1;}else if(fmode[0]=='1') /*open file with write only mode*/{strcpy(str,"write only");if((ufd[k]->ufdfile[i].fmode==1)||(ufd[k]->ufdfile[i].fmode==2)) ifopen[k][i].ifopen=1;}else if(fmode[0]=='2') /*open file with read and write mode*/{strcpy(str,"read and write");if(ufd[k]->ufdfile[i].fmode==2) ifopen[k][i].ifopen=1;}if(ufd[k]->ufdfile[i].fmode==0) strcpy(str1,"read only"); /*FileMode*/else if(ufd[k]->ufdfile[i].fmode==1) strcpy(str1,"write only");else if(ufd[k]->ufdfile[i].fmode==2) strcpy(str1,"read and write");if(ifopen[k][i].ifopen==1){ifopen[k][i].openmode=atoi(fmode);if (ifopen[k][i].openmode==0) strcpy(str,"read only");else if(ifopen[k][i].openmode==1) strcpy(str,"write only");else if(ifopen[k][i].openmode==2) strcpy(str,"read and write");printf("\n\'%s\' has been opened. OpenMode is %s,FileModeis %s\n",fname,strupr(str),strupr(str1));wgetchar=1;} else{printf("\nError. \'%s\' hasn\'t been opened. OpenMode Error. OpenMode is %s,but FileMode is %s\n",fname,strupr(str),strupr(str1));wgetchar=1;}} else {printf("\nError. FileOpenMode\'s Range is 0-2\n");wgetchar=1;}}} else {printf("\nError. \'%s\' is in open status.\n",fname);wgetchar=1;}} else{printf("\nError. \'%s\' does not exist.\n",fname);wgetchar=1;}}******************************************************************************* void CloseF() /*Close File*/{int i,k,n=0;char fname[MAXNAME];char *rtrim(char *str); /*remove the trailing blanks.*/char *ltrim(char *str); /*remove the heading blanks.*/int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/int ExistD(char *dirname);if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0){printf("\nError. Please convert to ufd dir before close.\n");wgetchar=1;return;}k=ExistD(dirname);printf("\nOpen File(s) In This Ufd:\n"); /*display openned file*/for(i=0;i<fcount[k];i++){if (ifopen[k][i].ifopen==1) {printf("%15s",ufd[k]->ufdfile[i].fname);n++;}if((n%4==0)&&(n!=0)) printf("\n");} printf("\n%d files openned.\n",n);if (n==0) wgetchar=1;if(n!=0){printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if(i>=0){if(ifopen[k][i].ifopen==1){ifopen[k][i].ifopen=0;ifopen[k][i].openmode=4;printf("\n\'%s\' has been closed successfully.\n",fname);wgetchar=1;} else {printf("\nError.\'%s\' is in closing status.\n",fname);wgetchar=1;}} else {printf("\nError. \'%s\' is not exist.\n",fname);wgetchar=1;}}}******************************************************************************* void ReadF() /*Read File*/{int i,k,n=0;char fname[MAXNAME];char str[255],str1[255],c;char *rtrim(char *str); /*remove the trailing blanks.*/char *ltrim(char *str); /*remove the heading blanks.*/int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/int ExistD(char *dirname);if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0) {printf("\nError.Please convert to ufd dir before read.\n");wgetchar=1;return;}printf("\nCaution:Open file first\n");printf("Opened File(s) List:\n");k=ExistD(dirname);for(i=0;i<fcount[k];i++){if (ifopen[k][i].ifopen==1)if ((ifopen[k][i].openmode==0) ||(ifopen[k][i].openmode==2)){printf("%15s",ufd[k]->ufdfile[i].fname);n++;}if((n%4==0)&&(n!=0)) printf("\n");}printf("\n%d files openned.\n",n);if (n==0) wgetchar=1;if(n!=0){printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if(i>=0){if(ifopen[k][i].ifopen==1){if((ifopen[k][i].openmode==0) ||(ifopen[k][i].openmode==2)){itoa(ufd[k]->ufdfile[i].fpaddr,str,10);strcpy(str1,"file");strcat(str1,str);strcpy(str,"c:\\osfile\\file\\");strcat(str,str1);fp_file=fopen(str,"rb");fseek(fp_file,0,0);printf("\nThe text is:\n\n");printf(" ");while(fscanf(fp_file,"%c",&c)!=EOF)if (c=='\n') printf("\n ");else printf("%c",c);printf("\n\n%d Length.\n",ufd[k]->ufdfile[i].flength);fclose(fp_file);wgetchar=1;}else{printf("\nError.\'%s\' has been opened with WRITE ONLY mode. It isn\'tread.\n",fname);wgetchar=1;}}else {printf("\nError.\'%s\' is in closing status. Please open it beforeread\n",fname);wgetchar=1;}}else {printf("\nError. \'%s\' does not exist.\n",fname);wgetchar=1;}}}******************************************************************************* void WriteF() /*Write File*/{int i,k,n=0;char fname[MAXNAME];char str[50],str1[50],a[50];char *rtrim(char *str); /*remove the trailing blanks.*/char *ltrim(char *str); /*remove the heading blanks.*/int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/int ExistD(char *dirname);int WriteF1(); /*write file*/if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0) {printf("\nError. Please convert to ufd dir before write.\n");wgetchar=1;return;}k=ExistD(dirname);printf("\nOpen File(s) with write only mode or read and write mode:\n");/*display openned files with writable mode*/for(i=0;i<fcount[k];i++){if (ifopen[k][i].ifopen==1)if ((ifopen[k][i].openmode==1) ||(ifopen[k][i].openmode==2)){printf("%15s",ufd[k]->ufdfile[i].fname);n++;}if((n%4==0)&&(n!=0)) printf("\n");}printf("\n%d files open.\n",n);if (n==0) wgetchar=1;if(n!=0){printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if(i>=0){if(ifopen[k][i].ifopen==1){if((ifopen[k][i].openmode==1) ||(ifopen[k][i].openmode==2)){itoa(ufd[k]->ufdfile[i].fpaddr,str,10);strcpy(str1,"file");strcat(str1,str);strcpy(str,"c:\\osfile\\file\\");strcat(str,str1);if (ufd[k]->ufdfile[i].flength!=0){printf("\n\'%s\' has text. Overwrite or Append(O-overwrite,A-Append,else-not write):",fname);gets(a);ltrim(rtrim(a));if (fp_file!=NULL) fclose(fp_file);if (strcmp(strupr(a),"O")==0){printf("\nOverwrite\n");fp_file=fopen(str,"wb");ufd[k]->ufdfile[i].flength=0;ufd[k]->ufdfile[i].flength=WriteF1();}else if(strcmp(strupr(a),"A")==0){printf("\nAppend\n");fp_file=fopen(str,"ab");ufd[k]->ufdfile[i].flength=ufd[k]->ufdfile[i].flength+WriteF1();}else{printf("\nError.\'%s\' has not been written.\n",fname);fclose(fp_file);wgetchar=1;} }else{fp_file=fopen(str,"wb");ufd[k]->ufdfile[i].flength=WriteF1();}}else{printf("\nError. \'%s\' has been opened with read only mode.It isn\'twrited.\n",fname);wgetchar=1;}}else{printf("\nError. \'%s\' is in closing status. Please open it beforewrite\n",fname);wgetchar=1;}}else{printf("\nError. \'%s\' does not exist.\n",fname);wgetchar=1;}}}◆实验结果及分析通过实验实现了有Create、delete、open、close、read、write等命令的简单的文件系统。

操作系统实验报告文件管理

操作系统实验报告文件管理

操作系统实验报告文件管理文件管理是操作系统的重要功能之一,它负责对计算机系统中的文件进行组织、存储和访问。

文件管理系统的设计和实现对操作系统的性能和可靠性起着重要作用。

本文将介绍文件管理的基本概念、文件系统的组织方式和文件的操作方法。

一、文件管理的概念文件是计算机系统中存储和管理数据的基本单位,它可以是文本、图像、音频、视频等各种类型的数据。

文件管理的目标是实现对文件的有效组织和高效访问,使得用户和应用程序可以方便地读取、写入和删除文件。

文件管理系统主要包括以下几个方面:1.文件组织方式:文件可以按照不同的方式进行组织,包括顺序文件、索引文件、哈希文件等。

不同的组织方式有不同的优势和适用场景,可以根据实际需要选择合适的组织方式。

2.文件存储管理:文件在存储设备上的存储方式包括连续存储、链式存储和索引存储等。

不同的存储方式对文件的读写性能和空间利用率有影响,需要根据实际情况进行选择。

3.文件访问控制:对文件的访问需要进行权限控制,保证只有合法的用户或应用程序可以读取和写入文件。

文件访问控制主要通过访问权限和文件属性来实现。

二、文件系统的组织方式1.单级目录结构:这是最简单的文件系统组织方式,所有文件都位于同一个目录下。

由于没有目录的嵌套结构,文件的查找和管理比较简单,但是对于大量文件的管理不够灵活。

2.层次目录结构:该方式通过目录的嵌套结构来组织文件,可以形成一棵树状结构。

目录可以包含子目录和文件,用户可以通过目录路径来访问文件。

这种组织方式可以更好地组织大量的文件,提高文件的查找效率。

3.索引目录结构:该方式使用一个索引表来记录文件的位置和属性信息,用户通过索引表中的索引来访问文件。

索引表可以根据文件名、文件类型等信息快速定位到文件的位置,提高访问效率。

此外,索引表还可以支持对文件的动态增删改查操作。

三、文件的操作方法1.创建文件:文件的创建是指在文件系统中创建一个新文件,并为其分配存储空间。

创建文件时需要指定文件名和文件类型,并根据需要为文件设置访问权限和属性。

操作系统文件管理实验报告

操作系统文件管理实验报告

操作系统文件管理实验报告操作系统文件管理实验报告1:引言本实验报告旨在详细描述操作系统文件管理实验的设计、实施和结果。

文件管理是操作系统的重要组成部分,负责对计算机中的文件进行组织、存储和访问。

本实验通过模拟文件管理的过程,加深对文件管理的理解和实践。

2:实验目的本实验的主要目的是:- 理解文件系统的概念和原理- 掌握文件的创建、读取、写入和删除等基本操作- 实施并测试文件的分配和回收算法- 评估不同的文件分配算法对系统性能的影响3:实验环境本实验的实施环境如下:- 操作系统:Windows 10- 开发环境:C++ 编程语言4:实验内容4.1 文件系统设计在文件系统设计中,首先确定文件的基本单位,例如块或扇区。

然后,定义文件控制块(FCB)结构,用于存储文件的元数据信息,如文件名、大小、创建时间、权限等。

接下来,设计文件分配表,记录系统中每个块的使用情况,用于实现文件的分配和回收。

4.2 文件的创建和删除在文件的创建过程中,首先为文件分配空间,并更新文件分配表。

然后,创建文件的FCB,并将其到目录项中。

在文件的删除过程中,首先释放文件的空间,并更新文件分配表。

然后,删除文件的FCB,并从目录项中移除。

4.3 文件的读写操作文件的读写操作是用户对文件进行读取和修改的过程。

在文件读取操作中,首先找到要读取的文件的FCB,获取文件的起始块地址,并从起始块中读取数据。

在文件写入操作中,首先找到要写入的文件的FCB,获取文件的起始块地址,并将数据写入起始块。

若文件大小超过起始块的容量,则按照一定的分配算法继续分配空间。

4.4 文件分配算法文件分配算法决定了操作系统如何管理文件的空间分配。

常用的文件分配算法包括顺序分配、分配和索引分配。

顺序分配将文件连续地存储在磁盘上,易于实现但可能产生外部碎片。

分配使用链表结构将文件存储在磁盘的不连续块中,不易产生外部碎片但可能引起存取时间增长。

索引分配使用索引表将文件存储在磁盘的不连续块中,不易产生外部碎片且存取时间相对较短,但索引表本身需要占用存储空间。

文件管理实验报告结果(3篇)

文件管理实验报告结果(3篇)

第1篇一、实验目的本次实验旨在通过实际操作,验证文件管理的有效性和可行性,并对文件管理系统的性能进行评估。

通过实验,了解文件管理的相关原理和方法,提高文件管理的实践能力。

二、实验环境1. 操作系统:Windows 102. 文件管理系统:Windows文件管理器3. 实验数据:实验过程中产生的文件和数据三、实验内容1. 文件创建与删除2. 文件夹创建与删除3. 文件与文件夹的复制、移动、重命名4. 文件属性的设置与修改5. 文件搜索与查找6. 文件权限管理7. 文件压缩与解压四、实验步骤1. 文件创建与删除(1)在Windows文件管理器中,新建一个名为“实验文件.txt”的文本文件。

(2)在“实验文件.txt”上右击,选择“删除”,确认删除。

2. 文件夹创建与删除(1)在Windows文件管理器中,新建一个名为“实验文件夹”的文件夹。

(2)在“实验文件夹”上右击,选择“删除”,确认删除。

3. 文件与文件夹的复制、移动、重命名(1)将“实验文件.txt”复制到“实验文件夹”中。

(2)将“实验文件.txt”移动到桌面。

(3)将“实验文件.txt”重命名为“实验文件修改.txt”。

4. 文件属性的设置与修改(1)在“实验文件修改.txt”上右击,选择“属性”,设置文件属性为“只读”。

(2)修改“实验文件修改.txt”的属性为“隐藏”。

5. 文件搜索与查找(1)在Windows文件管理器中,输入“实验文件”进行搜索。

(2)使用“查找”功能,查找“实验文件修改.txt”。

6. 文件权限管理(1)在“实验文件夹”上右击,选择“属性”,点击“安全”标签。

(2)添加用户权限,设置权限为“完全控制”。

7. 文件压缩与解压(1)将“实验文件夹”压缩为“实验文件夹.zip”。

(2)解压“实验文件夹.zip”到指定位置。

五、实验结果与分析1. 文件创建与删除:实验成功创建和删除了文件,验证了文件管理的可行性。

2. 文件夹创建与删除:实验成功创建和删除了文件夹,验证了文件管理的可行性。

操作系统实验(金虎)实验四文件管理源代码

操作系统实验(金虎)实验四文件管理源代码
r->num=a;
if(flag1==0)//将指针指向申请fat表块数第一块
{
p->f=r;
flag1++;
}
p->length++;
r->next=NULL;
while(t->next!=NULL)
t=t->next;
int i=0,j=0;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
cout<<map[i][j]<<" ";
cout<<endl;
}
}
void mk()
{
Fname *p,*q,*s;
Fat *r,*t;
q=temp;
s=temp;
t=Ft;
cuur = time(NULL);
strftime(tmp,sizeof(tmp),"%Y-%m-%d %X",localtime(&cuur));//显示时间
int i,j,a=0,num,k=0,flag1=0;
string name;
cin>>name;
cout<<"请输入文件大小:"<<endl;
q=q->brother;
}
}
while(r->file!=NULL) //计算文件所占字节
{
f=r->file->f;
y=r->file->length;

实验四: 文件管理

实验四: 文件管理

实验四:文件管理一、实验目的1、掌握linux文件保护的原理2、掌握linux 符号链接、软链接的不同二.实验环境一台已经安装好Linux操作系统的主机/或安装过vmware的windows系统。

三.实验内容内容一:Linux操作系统下帐号管理命令及文件介绍1、添加用户2、为用户添加密码3、锁定账号4、解锁账号5、设置账号的过期时间6、添加组账号7、指定用户的所属组8、修改用户的所属组9、删除组内容二:Linux操作系统下文件、目录权限管理1、为用户创建的所有新文件生成一个默认的文件权限 755。

2、改变/opt/local /book/及其子目录下的所有文件的属组为book3.把文件shiyan.c的所有者改为wan4.把目录/hi及其下的所有文件和子目录的属主改成wan,属组改成users。

5.新建一个文件,并将它的权限修改为 rwxrw-r--, 最少列举两种方法:内容三:硬链接、符号连接Linux系统中连接文件分为硬连接和符号连接。

硬连接:只是在某一目录下的块多写入一个关联数据,不会用掉incode 与磁盘空间(只有当目录的块被用完,才可能会增加一个块来完成,从而导致磁盘空间发生变化,这样的可能性非常小)。

符号连接:我们可以理解成如Windows的快捷方式。

符号连接是一个独立的新文件,所以占inode与块。

(注:在ext2文件系统中,文件由文件属性块(即indoe talbe)和文件内容块两区域)实验步骤:1、 /显示当前目录占用的容量,和磁盘空间大小命令:结果:2、使用vi建立一个测试文件test。

内容为“Hello everyone!”3、显示当前目录占用的容量,和磁盘空间大小结果:4、为test创建硬连接文件testh命令:5、查看建立硬连接文件后的目录容量和磁盘大小,注意:目录容量磁盘大小是否改变。

结果:6、为test创建一个符号连接文件testo文件命令:7、查看建立符号连接文件后的目录容量和磁盘大小,注意:目录容量磁盘大小是否改变。

实验四 文件管理

实验四  文件管理

实验四Linux下的文件管理1. 实验目的⑴加深对文件,目录,文件系统等概念的理解。

⑵掌握Linux系统中文件和目录的基本操作方法;⑶了解在多用户环境下文件和目录权限的重要性。

⑷了解有关文件安全方面的知识。

2. 实验准备⑴阅读Linux文件系统的树形结构,掌握系统中各目录的用途。

⑵阅读树形结构中每个目录的内容,分析进程的创建过程。

3. 实验内容⑴使用pwd,cd,ls等命令浏览文件系统。

⑵使用cat,cp,mv,head,tail,rm等命令查看你的文件。

⑶使用ln命令进行文件的硬连接和符号连接。

软中断通信⑷使用find,grep命令进行文件查找和模式匹配。

⑸使用chmod命令修改文件的权限。

4. 实验步骤进入虚拟机,并在此平台上练习文件管理有关命令.一般在[root @ localhost xxxx]$提示符下键入有关命令。

【步骤1】浏览文件系统⑴运行pwd命令,确定你当前的工作目录。

利用以下命令显示当前工作目录的内容:ls –l运行以下命令:(反馈信息中.代表本身目录,..代表其父目录;选项a可以显示隐藏文件;选项i可以显示文件的I节点号)ls –ai使用mkdir命令建立一个子目录subdir,并用ls查看当前目录。

使用带-d选项的ls命令,你只能看到有关子目录的信息(.表示本身目录)。

Ls -d⑵使用cd命令,将工作目录改到根目录(/)上。

用相对路径将工作目录改到根目录。

Pwd 显示当前目录为 /home/mengqcCd .. 相对路径,返回上一级。

Pwd 反馈显示当前目录为 /homeCd .. 相对路径,再返回上一级。

Pwd 反馈显示当前目录为 /Cd /home/mengqc 恢复本身目录(也可以 cd↙).Pwd 反馈显示当前目录用绝对路径将工作目录改到根目录。

Cd / 用绝对路径返回根目录,Pwd 反馈显示当前目录为 /⑶使用ls命令列出根目录的内容,再分别列出各子目录的内容,体会各目录作用及访问权限。

实验四文件系统实验

实验四文件系统实验

实验四文件系统实验一. 目的要求1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。

从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。

2、要求设计一个n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。

二. 例题:1、设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。

2、程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。

另外,为打开文件设置了运行文件目录(AFD)。

3、为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。

4、算法与框图:①因系统小,文件目录的检索使用了简单的线性搜索。

②文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位为0,则表示不允许读写、执行。

③程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD、UFD)打开文件目录(AFD)(即运行文件目录)文件目录指针文件名··文件系统算法的流程图如下:三. 实验题:1、增加2~3个文件操作命令,并加以实现。

(如移动读写指针,改变文件属性,更换文件名,改变文件保护级别)。

代码如下://1、增加2~3个文件操作命令,并加以实现。

(如移动读写指针,改变文件属性,更换文件名,改变文件保护级别)。

#include<iostream>#include<string>#include<conio.h>using namespace std;struct TYPE_UFD{string File_Name;bool Read;bool Write;bool Execute;int Length_File;};struct TYPE_MFD{string User_Name;TYPE_UFD *Pointer;};struct TYPE_AFD{int File_ID;bool Read;bool Write;bool Execute;int Pointer;};class TYPE_FILE_SYSTEM{public:void Initial( void );void Start( void );private:int _Number_Users;int _Number_Files;int _MaxNumber_Open_Files;TYPE_MFD *_MFD;TYPE_UFD *_UFD;TYPE_AFD *_AFD;};void TYPE_FILE_SYSTEM::Initial( void ){_Number_Users = 10;_Number_Files = 10;_MaxNumber_Open_Files = 5;_UFD = new TYPE_UFD [_Number_Users*_Number_Files];_MFD = new TYPE_MFD [_Number_Users];int i=0;for( i=0 ; i<_Number_Users ; i++ ){_MFD[i].Pointer = &(_UFD[i*_Number_Files]);}_AFD = new TYPE_AFD [_MaxNumber_Open_Files];_MFD[0].User_Name = "zaq";_UFD[0].File_Name = "file1.txt";_UFD[0].Length_File = 10;_UFD[0].Read = true;_UFD[0].Write = false;_UFD[0].Execute = true;_UFD[1].File_Name = "file2.txt";_UFD[1].Length_File = 20;_UFD[1].Read = true;_UFD[1].Write = false;_UFD[1].Execute = false;for( i=2 ; i<_Number_Files ; i++ ){_UFD[i].File_Name = "";_UFD[i].Length_File = -1;_UFD[i].Read = false;_UFD[i].Write = false;_UFD[i].Execute = false;}}void TYPE_FILE_SYSTEM::Start( void ){int User_ID;int i,temp_int;string temp;char choice;int Number_Open_Files;string User_Name;string Command;TYPE_UFD *UFD;do{do{cout << "已创建用户名为zaq\n指令有:create delete open dir diropen write read logout shutdown \n\n";cout << "请输入用户名:";cin >> User_Name;for( User_ID=0 ; User_ID<_Number_Users ; User_ID++ ){if( _MFD[User_ID].User_Name == User_Name )break;}if( User_ID == _Number_Users )cout << "用户名错误,请再次输入." << endl;}while( User_ID == _Number_Users );cout << "欢迎登录, " << User_Name << " !" << endl;UFD = _MFD[User_ID].Pointer;for( i=0 ; i<_MaxNumber_Open_Files ; i++ ){_AFD[i].File_ID = -1;}Number_Open_Files = 0;do{cout << "C:\\" << User_Name << ">" ;cin >> Command;if( Command == "dir" ){cout << endl;cout << "打开用户" << User_Name <<"的文件" << endl;cout << "\t" << "State\t" << "Length\t" << "File name" << endl;for( i=0 ; i<_Number_Files ; i++ ){if( UFD[i].Length_File != -1 ){cout << "\t" ;if( UFD[i].Read == true )cout << "R";elsecout << "-";if( UFD[i].Write == true )cout << "W";elsecout << "-";if( UFD[i].Execute == true )cout << "E";elsecout << "-";cout << "\t";cout << UFD[i].Length_File;cout << "\t";cout << UFD[i].File_Name << endl;}}cout << endl;}else if( Command == "diropen" ){cout << endl;cout << "打开用户" << User_Name << "的文件"<<endl;cout << "\t" << "State\t" << "Open File name" << endl;for( i=0 ; i<_MaxNumber_Open_Files ; i++ ){if( _AFD[i].File_ID != -1 ){cout << "\t" ;if( _AFD[i].Read == true )cout << "R";elsecout << "-";if( _AFD[i].Write == true )cout << "W";elsecout << "-";if( _AFD[i].Execute == true )cout << "E";elsecout << "-";cout << "\t";cout << UFD[_AFD[i].File_ID].File_Name << endl;}}cout << endl;}else if( Command == "create" ){for( i=0 ; i<_Number_Files ; i++ )if( UFD[i].Length_File == -1 )break;if( i == _Number_Files )cout << "Error: 已有名为" << _Number_Files << " 的文件." << endl;else{cout << "请输入新文件信息:" << endl;cout << "文件名: ";cin >> temp;UFD[i].File_Name = temp;cout << "文件权限: ";cout << "Read (y/n):";do{choice = getch();}while( choice!='y' && choice!='n' );if( choice == 'y' )UFD[i].Read = true;elseUFD[i].Read = false;cout << endl;cout << "Write (y/n):";do{choice = getch();}while( choice!='y' && choice!='n' );if( choice == 'y' )UFD[i].Write = true;elseUFD[i].Write = false;cout << endl;cout << "Execute (y/n):";do{choice = getch();}while( choice!='y' && choice!='n' );if( choice == 'y' )UFD[i].Execute = true;elseUFD[i].Execute = false;cout << endl;cout << "Length :";cin >> temp_int;if( temp_int > 0 )UFD[i].Length_File = temp_int;cout << "新文件" << UFD[i].File_Name << " 已建立!" << endl;}}else if( Command == "delete" ){cout << "请输入文件名:";cin >> temp;for( i=0 ; i<_Number_Files ; i++ )if( (UFD[i].Length_File!=-1)&&(UFD[i].File_Name==temp) )break;if( i == _Number_Files )cout << "文件名错误,请再次输入." << endl;else{UFD[i].Length_File = -1;cout << "文件" << UFD[i].File_Name << " 已删除." << endl;}}else if( Command == "open" ){if( Number_Open_Files == _MaxNumber_Open_Files )cout << "Error: 你已经打开了" <<Number_Open_Files << " 文件." << endl;else{cout << "请输入文件名:";cin >> temp;for( i=0 ; i<_Number_Files ; i++ )if( (UFD[i].Length_File!=-1)&&(UFD[i].File_Name==temp) )break;if( i == _Number_Files )cout << "文件名错误,请再次输入." << endl;else{Number_Open_Files++;for( temp_int=0 ;temp_int<_MaxNumber_Open_Files ; temp_int++ )if( _AFD[temp_int].File_ID == -1 )break;_AFD[temp_int].File_ID = i;_AFD[temp_int].Pointer = 0;cout << "请定义打开方式:" << endl;if( UFD[i].Read == true ){cout << "Read (y/n):";do{choice = getch();}while( choice!='y' && choice!='n' );if( choice == 'y' )_AFD[temp_int].Read = true;else_AFD[temp_int].Read = false;cout << endl;}else_AFD[temp_int].Read = false;if( UFD[i].Write == true ){cout << "Write (y/n):";do{choice = getch();}while( choice!='y' && choice!='n' );if( choice == 'y' )_AFD[temp_int].Write = true;else_AFD[temp_int].Write = false;cout << endl;}else_AFD[temp_int].Write = false;if( UFD[i].Execute == true ){cout << "Execute (y/n):";do{choice = getch();}while( choice!='y' && choice!='n' );if( choice == 'y' )_AFD[temp_int].Execute = true;else_AFD[temp_int].Execute = false;cout << endl;}else_AFD[temp_int].Execute;cout << "文件" << temp << " 已打开." << endl;}}}else if( Command == "logout" ){cout << "再见, " << User_Name << " !" << endl;break;}else if( Command == "close" ){cout << "请输入文件名:";cin >> temp;for( i=0 ; i<_Number_Files ; i++ )if( (UFD[i].Length_File!=-1)&&(UFD[i].File_Name==temp) )break;if( i == _Number_Files )cout << "文件名错误,请再次输入." << endl;else{for( temp_int=0 ;temp_int<_MaxNumber_Open_Files ; temp_int++ )if( _AFD[temp_int].File_ID == i )break;if( temp_int == _MaxNumber_Open_Files )cout << "文件" << temp << " 未打开." << endl;else{_AFD[temp_int].File_ID = -1;Number_Open_Files--;cout << "文件" << temp << " 已关闭." << endl;}}}else if( Command == "read" ){cout << "请输入文件名:";cin >> temp;for( i=0 ; i<_Number_Files ; i++ )if( (UFD[i].Length_File!=-1)&&(UFD[i].File_Name==temp) )break;if( i == _Number_Files )cout << "文件名错误,请再次输入." << endl;else{for( temp_int=0 ;temp_int<_MaxNumber_Open_Files ; temp_int++ )if( _AFD[temp_int].File_ID == i )break;if( temp_int == _MaxNumber_Open_Files )cout << "文件" << temp << " 未打开." << endl;else{if( _AFD[temp_int].Read == true )cout << "文件" << temp << " 成功读取." << endl;elsecout << "Error: 文件打开模式错误." << endl;}}}else if( Command == "write" ){cout << "请输入文件名:";cin >> temp;for( i=0 ; i<_Number_Files ; i++ )if( (UFD[i].Length_File!=-1)&&(UFD[i].File_Name==temp) )break;if( i == _Number_Files )cout << "文件名错误,请再次输入." << endl;else{for( temp_int=0 ;temp_int<_MaxNumber_Open_Files ; temp_int++ )if( _AFD[temp_int].File_ID == i )break;if( temp_int == _MaxNumber_Open_Files )cout << "文件" << temp << " 未打开." << endl;else{if( _AFD[temp_int].Write == true )cout << "文件" << temp << " 成功写入." << endl;elsecout << "Error: 文件打开模式错误." << endl;}}}else if( Command == "shutdown" ){cout << "正在注销........" << endl;cout << "再见, " << User_Name << " !" << endl;cout << "正在关机.........." << endl;break;}else{cout << "指令错误,请再次输入." << endl;}}while( Command != "logout" && Command != "shutdown" );}while( Command != "shutdown" );}int main(){TYPE_FILE_SYSTEM FS;FS.Initial();FS.Start();return 0;}2、编一个通过屏幕选择命令的文件管理系统,每屏要为用户提供足够的选择信息,不需要打入冗长的命令。

文件管理实验报告

文件管理实验报告
typedef struct tree
{char name[3]; /*文件或目录名*/
char type[2]; /*文件类型名*/
char attribute; /*属性*/ // 0表示文件,1表示目录.
char address; /*文件或目录的起始盘块号*/
char length; /*文件长度,以盘块为单位*/
q=p;
if (q->l ->name[0] ==[0]&&q->l ->name[1] ==[1]&&q->l ->name[2] ==[2])//判断文件名与当前目录中的相同名
{return q->l->address ;//若找到则返回此文件的磁块号}
else printf(" <FILE>\n");
q=q->l;//指针指向下一结点
while(q->r!=0)
{printf("%s",q->r->name);
if (q->r->attribute ==1) printf(" <DIR>\n");//判断是文件还是目录
else printf(" <FILE>\n");
二.实验原理
文件通常存放在外存(如磁盘、磁带)上,可以作为一个独立单位存放和实施相应的操作(如打开、关闭、读、写等)。为了加快对文件的检索,往往将文件控制块集中在一起进行管理。这种文件控制块的有序集合称为文件目录。文件控制块就是其中的目录项。图6-1示例一种目录的组织形式。
三.实验内容
模拟一个文件系统,包括目录文件,普通文件,并实现对它们的一些基本操作。假定每个目录文件最多只能占用一个块;一个目录项包括文件名(下一级目录名),文件类型,文件长度,指向文件内容(下一级目录)的指针内容。普通文件可以只用目录项(FCB)代表。

文件管理实验实验报告

文件管理实验实验报告

一、实验目的1. 理解文件管理的基本概念和原理。

2. 掌握文件系统的组织结构和文件操作的基本方法。

3. 培养实际操作能力,提高文件管理的效率。

二、实验环境1. 操作系统:Windows 102. 文件管理工具:Windows自带的文件管理器三、实验内容1. 文件系统的基本概念和原理2. 文件系统的组织结构3. 文件操作的基本方法4. 文件夹的创建、删除、重命名等操作5. 文件和文件夹的搜索与查找6. 文件属性的查看和修改7. 文件和文件夹的复制、移动、粘贴等操作8. 文件和文件夹的压缩与解压缩9. 文件和文件夹的权限设置四、实验步骤1. 打开文件管理器,查看当前文件夹的结构。

2. 创建一个新的文件夹,命名为“实验文件夹”。

3. 在“实验文件夹”中创建一个文本文件,命名为“实验.txt”。

4. 打开“实验.txt”,输入以下内容:实验报告:文件管理实验5. 保存并关闭“实验.txt”。

6. 将“实验.txt”复制到“实验文件夹”中。

7. 将“实验.txt”移动到桌面。

8. 重命名“实验.txt”为“实验1.txt”。

9. 删除“实验1.txt”。

10. 搜索“实验文件夹”中的文件。

11. 查看文件属性。

12. 修改文件属性。

13. 压缩“实验文件夹”。

14. 解压缩“实验文件夹”。

15. 设置文件和文件夹的权限。

五、实验结果与分析1. 文件系统的基本概念和原理:通过实验,我们了解到文件系统是计算机中用于存储和管理文件的数据结构,包括文件、文件夹、磁盘等。

文件系统负责对文件进行组织、存储、检索、更新等操作。

2. 文件系统的组织结构:实验中,我们通过文件管理器查看当前文件夹的结构,了解到文件系统采用树状结构组织文件和文件夹。

3. 文件操作的基本方法:实验中,我们学习了文件和文件夹的创建、删除、重命名、复制、移动、粘贴等操作方法。

4. 文件和文件夹的搜索与查找:实验中,我们通过文件管理器搜索功能,快速找到所需的文件和文件夹。

文件管理实验报告

文件管理实验报告

文件管理实验报告文件管理实验报告一、引言文件管理是计算机科学中一个重要的领域,它涉及到对文件的创建、存储、检索和删除等操作。

在这个实验中,我们将通过模拟文件管理系统来了解文件管理的基本原理和技术。

二、实验目的本实验的主要目的是通过设计和实现一个简单的文件管理系统,加深对文件管理的理解,并掌握文件的创建、读写、删除等基本操作。

三、实验过程1. 文件的创建在文件管理系统中,文件的创建是一个重要的操作。

我们首先需要确定文件的名称和文件的类型。

在实验中,我们选择了一个文本文件作为示例。

通过调用系统提供的文件创建函数,我们可以在指定的目录下创建一个新的文本文件。

2. 文件的读写文件的读写是文件管理的核心操作之一。

在实验中,我们使用了C语言的文件读写函数来实现对文件的读写操作。

首先,我们需要打开文件,然后可以使用读取函数来读取文件中的内容,或者使用写入函数来向文件中写入内容。

最后,我们需要关闭文件,以确保文件的完整性和安全性。

3. 文件的删除文件的删除是一个常见的操作。

在实验中,我们通过调用系统提供的文件删除函数来删除指定的文件。

在删除文件之前,我们需要确保文件已经关闭,并且没有其他进程正在使用该文件。

通过删除文件,我们可以释放磁盘空间,并且保持文件系统的整洁。

四、实验结果通过实验,我们成功地创建了一个简单的文件管理系统,并实现了文件的创建、读写和删除等基本操作。

我们可以通过系统提供的命令来查看文件的属性和内容,以及进行其他操作。

五、实验总结通过这次实验,我们深入了解了文件管理的原理和技术。

文件管理是计算机科学中一个重要的领域,它涉及到对文件的创建、存储、检索和删除等操作。

掌握文件管理的基本原理和技术对于我们理解计算机系统的运行机制和提高工作效率都具有重要意义。

在实验中,我们通过设计和实现一个简单的文件管理系统,加深了对文件管理的理解,并掌握了文件的创建、读写、删除等基本操作。

通过实验结果的验证,我们证明了文件管理系统的可行性和有效性。

文件管理-实验4

文件管理-实验4

4.程序清单编一个通过屏幕选择命令的文件管理系统,每屏要为用户提供足够的选择信息,不需要打入冗长的命令。

#include<stdio.h>#include<stdlib.h>#include<string.h>//主文件结构体struct MasterFile{char username[20]; //用户名char password[20]; //用户名密码char flag; //标志struct MasterFile *next;};//用户文件结构体struct UserFile{int fnum; //文件编号char fname[20]; //文件名int flength; //文件长度char flag; //标志char fpw[20]; //文件保护码struct UserFile *link;};//全局变量int shoudsave; //存储标记int usingnum; //当前用户标记struct Master[20]; //主目录struct User[20][20]; //用户目录//寻找主目录空闲区struct Master(){for(int i=0;i<20;i++){if(MFD[i].flag==0)usingnum=i;return &MFD[i];}return NULL;}//查找用户struct Master(char str[]){for(int i=0;i<20;i++){if(strcmp(str,MFD[i].username)==0){usingnum=i;return &MFD[i];}}return NULL;}//寻找用户目录空闲区struct UserFile *MoveUFDToLast(){for(int i=0;i<20;i++){if(UFD[usingnum][i].flag==0)return &UFD[usingnum][i];}return NULL;}//查找用户文件struct UserFile *SearchUFD(int num){for(int i=0;i<20;i++){if(UFD[usingnum][i].fnum==num)return &UFD[usingnum][i];}return NULL;}//删除用户文件目录void LeftMoveUFD(int num){for(int i=0;i<20;i++){if(UFD[usingnum][i].fnum==num){for(int j=i;j<19;j++){UFD[usingnum][i].flag=UFD[usingnum][i+1].flag;UFD[usingnum][i].flength=UFD[usingnum][i+1].flength;strcpy(UFD[usingnum][i].fname,UFD[usingnum][i+1].fname);UFD[usingnum][i].fnum=UFD[usingnum][i+1].fnum;strcpy(UFD[usingnum][i].fpw,UFD[usingnum][i+1].fpw);UFD[usingnum][i].link=UFD[usingnum][i+1].link;}}}}//用户登陆void Login(){char flag1,flag2,flag3;char str1[20],str2[20],str3[20],str4[20];struct MasterFile *p;printf("你是已有用户吗(y/n)?");scanf("%s",&flag1);if(flag1=='n'){ //新用户登录printf("请创建新的用户:(y/n)");scanf("%s",&flag2);if(flag2=='n'){printf("你已退出了系统!\n");exit(1);}else{printf("请输入你的用户名:");scanf("%s",&str1);printf("请输入口令:");scanf("%s",&str2);p=MoveMFDToLast();strcpy(p->username,str1);strcpy(p->password,str2);p->flag=1;printf("%d",MFD[usingnum].flag);p->next=NULL;shoudsave=1; //存储标记}}else{ //旧用户登录while(1){printf("请输入你的用户名:"); //输入用户名scanf("%s",&str3);p=SearchMFD(str3);if(p==NULL){printf("对不起,你输入的用户名不存在!\n");printf("继续(y)还是放弃(n)?");scanf("%s",&flag3);if(flag3=='y') continue;else{printf("你已退出了系统!\n");exit(1);}}else{while(1){printf("请输入口令:"); //输入口令scanf("%s",&str4);if(strcmp(str4,p->password)!=0){printf("对不起,你输入的口令不正确,请重新输入.\n");continue;}else break;}}break;}}}//菜单void menu(){printf("\n********************************************************************************");printf("\t1列文件目录\t\t\t\t\t2创建文件\n");printf("\t3删除文件\t\t\t\t\t4读文件\n");printf("\t5写文件\t\t\t\t\t\t0退出系统\n");printf("********************************************************************************\n"); }//列文件目录void Dir(){if(MFD[usingnum].next==0)printf("目前你不存在任何文件!\n");else{for(int i=0;i<20;i++){if(UFD[usingnum][i].flag==1)printf("文件编号\t%d\t文件名\t%s\t文件长度\t%d\t保护码\t%s\n",UFD[usingnum][i].fnum,UFD[usingnum][i].fname,UFD[usingnum][i].flength,UFD[usingnum][i].fpw);}}}//创建文件void Create(){FILE *fp;int num;struct UserFile *f;char str1[20],str2[20];printf("请输入你要创建的文件名:"); //输入文件信息scanf("%s",&str1);printf("请输入文件编号:");scanf("%d",&num);printf("请输入文件保护码:");scanf("%s",&str2);fp=fopen(str1,"w"); //创建文件f=MoveUFDToLast(); //寻找用户目录空闲区if(&UFD[usingnum][0]==f) //连接主目录MFD[usingnum].next=(struct MasterFile*)f;f->link=(struct UserFile*)fp; //设置用户目录MFD[usingnum].next=(struct MasterFile*)&UFD[usingnum][0];strcpy(f->fname,str1);strcpy(f->fpw,str2);f->fnum=num;f->flength=0;f->flag=1;fclose(fp);shoudsave=1; //设置存储标记printf("文件已创建!\n");}//删除文件void Delete(){struct UserFile *f;int num;printf("请输入你要删除的文件编号:");scanf("%d",&num);f=SearchUFD(num); //查找用户文件if(f==NULL) {printf("你要删除的文件不存在!\n");}else{LeftMoveUFD(num); //删除用户文件目录printf("文件已删除!\n");}shoudsave=1; //设置存储标记}//读文件void Read(){char ch;struct UserFile *f;FILE *fp;int num;printf("请输入你要读的文件的编号:");scanf("%d",&num);f=SearchUFD(num); //查找文件if(f==NULL){printf("你输入的文件不存在!\n");}else{if((fp=fopen(f->fname,"r"))==NULL){ //打开指定文件printf("不能打开该文件!\n");exit(0);}}ch=fgetc(fp); //输出文件内容while(ch!=EOF){putchar(ch);ch=fgetc(fp);}printf("\n");fclose(fp); //关闭文件printf("文件已读完毕!\n");}//写文件void Write(){char ch;struct UserFile *f;FILE *fp;int num;printf("请输入你要写的文件的编号:");scanf("%d",&num);f=SearchUFD(num); //查找文件if(f==NULL){printf("你输入的文件不存在!\n");}else{if((fp=fopen(f->fname,"wr"))==NULL){ //打开指定文件printf("不能打开该文件!\n");exit(0);}}printf("请按字符输入内容(以'#'表示结束符)"); //写入文件scanf("%s",&ch);while(ch!='#'){fwrite(&ch,1,1,fp);scanf("%s",&ch);}fclose(fp); //关闭文件shoudsave=1; //设置存储标记printf("文件写入完毕!\n");}//保存void Save(){FILE *fpm,*fpu;int flag=1,count=0;fpm=fopen("F:\\Master","wb"); //打开主文件if(fpm==NULL){printf("\n提示:重新打开主文件信息文件时发生错误!\n");exit(1);}for(int i=0;i<20;i++)fwrite(&MFD[i],sizeof(struct Master); //保存主文件目录信息fclose(fpm);printf("主文件目录信息保存完毕!\n");fpu=fopen("F:\\User","wb"); //打开用户文件if(fpu==NULL){printf("\n提示:重新打开用户目录信息文件时发生错误!\n");exit(1);}for(int j=0;j<20;j++) //保存用户文件目录信息fwrite(&UFD[j],sizeof(struct User);fclose(fpu);printf("用户文件目录信息保存完毕!\n");}//主函数int main(){printf("\n\n\t\t*********************************************\t\t\n");printf("\t\t\t\t实验四文件管理\n");printf("\t\t*********************************************\t\t\n");printf("\n\n\n\t\t\t\t\t计算机1206\n");printf("\t\t\t\t\t王成义\n");printf("\t\t\t\t\t1030412612\n");printf("\t\t\t\t\t完成时间:2015/5/28\n\n\n\n");printf("\t\t\t\tWelcome\n\n");FILE *fpm,*fpu; //文件指针int sel;char ch;char jian;printf("\t\t\t\t文件管理系统\n\t\t\t\t\n");fpm=fopen("D:\\Master","rb"); //打开主文件目录信息文件if(fpm==NULL) {printf("\n提示:主文件目录信息文件还不存在,是否创建?(y/n)\n");scanf("%s",&jian);if(jian=='y'||jian=='Y')fpm=fopen("D:\\Master","wb"); //创建主文件目录的文件else exit(0);}fpu=fopen("D:\\User","rb"); //打开用户文件目录信息文件if(fpu==NULL){printf("\n提示:用户文件目录信息文件还不存在,是否创建?(y/n)\n");scanf("%s",&jian);if(jian=='y'||jian=='Y')fpu=fopen("D:\\User","wb"); //创建用户文件目录的文件else exit(0);}printf("文件正在打开,请稍等...");for(int i=0;i<20;i++) //读取主文件目录信息fread(&MFD[i],sizeof(struct Master); //将文件的内容放入接点中fclose(fpm); // 关闭文件while(!feof(fpu)){ //读取用户目录文件信息for(int i=0;i<20;i++){if(fread(&UFD[i][0],sizeof(struct User)) //将文件的内容放入接点中MFD[i].next=(struct MasterFile*)&UFD[i][0];}}fclose(fpu); //关闭文件printf("\n文件已导入完毕!\n");Login(); //用户登录while(1) { //菜单操作menu();printf("请你选择操作:");scanf("%d",&sel);if(sel==0){ //保存文件信息if(shoudsave==1){getchar();printf("\n资料已经改动,是否将改动保存到文件中(y/n)?\n");scanf("%c",&ch);if(ch=='y'||ch=='Y')Save();}printf("\n你已经退出系统,再见!\n");break;}switch(sel){case 1:Dir();break; //列文件目录case 2:Create();break; //创建文件case 3:Delete();break; //删除文件case 4:Read();break; //读文件case 5:Write();break; //写文件default: printf("你输的选项有误,请重新输入!\n");break;}}system("PAUSE");return 0;}5.运行情况。

操作系统文件管理实验代码

操作系统文件管理实验代码

//利用交‎互式命令实‎现树型目录‎结构和文件‎管理,同时‎利用位示图‎表示外存的‎分配情况,‎新建文件时‎分配必要的‎空间,模拟‎文件分配表‎记录文件在‎外存上的存‎储方式。

了‎解系统对文‎件的操作。

‎//在文‎件中保存目‎录内容,创‎建文件或子‎目录可以用‎命令行命令‎:MD、C‎D、RD、‎M K(创建‎文件)、D‎E L(删除‎文件)和D‎I R‎#incl‎u de<i‎o stre‎a m>#‎i nclu‎d e<st‎d lib.‎h>#i‎n clud‎e<tim‎e.h>‎#incl‎u de <‎l ocal‎e.h> ‎//#‎i nclu‎d e<st‎r ing>‎usin‎g nam‎e spac‎e std‎;//‎#defi‎n e be‎g insi‎z e 5‎#defi‎n e LE‎N GTH ‎3typ‎e def ‎s truc‎t{‎i nt d‎a ta[L‎E NGTH‎];}I‎n dire‎o ne;‎t yped‎e f st‎r uct‎{In‎d ireo‎n e * ‎f irst‎[LENG‎T H];‎}Indi‎r etwo‎;typ‎e def ‎s truc‎t{‎I ndir‎e two ‎* sec‎o nd[L‎E NGTH‎];}I‎n dire‎t hree‎;typ‎e def ‎s truc‎t Nod‎e{‎i nt b‎e gin[‎b egin‎s ize]‎;In‎d ireo‎n e * ‎o ne;‎Indi‎r etwo‎* tw‎o;I‎n dire‎t hree‎* th‎r ee;‎}Mixt‎a b;‎t yped‎e f st‎r uct ‎N ODE‎{ch‎a r na‎m e[50‎];i‎n t ty‎p e;//‎是文件还是‎目录i‎n t si‎z e;//‎如果是文件‎给出大小‎stru‎c t NO‎D E *n‎e xt;/‎/兄弟结点‎str‎u ct N‎O DE *‎sub;‎//子节点‎str‎u ct N‎O DE *‎fath‎e r;//‎父亲节点‎Mixt‎a b * ‎t able‎;}FC‎B;//‎文件控制块‎FCB ‎* roo‎t;FC‎B * p‎r esen‎t;FC‎B * f‎i ndin‎g;ch‎a r st‎r ingn‎a me[3‎00];‎i nt B‎i tmap‎[16][‎16];/‎/位示图‎i nt l‎e ftbi‎t=0;‎v oid ‎I nita‎l l()‎{in‎t i,j‎;sr‎a nd( ‎t ime(‎N ULL)‎);‎f or(i‎=0;i<‎16;i+‎+){‎//初始化‎位示图‎for(‎j=0;j‎<16;j‎++)‎{‎Bitm‎a p[i]‎[j]=r‎a nd()‎%2;‎}}‎roo‎t=(FC‎B *)m‎a lloc‎(size‎o f(FC‎B));‎strc‎p y(ro‎o t->n‎a me,"‎\\");‎roo‎t->ty‎p e=0;‎roo‎t->si‎z e=0;‎roo‎t->ne‎x t=NU‎L L;‎r oot-‎>fath‎e r=ro‎o t;‎r oot-‎>sub=‎N ULL;‎for‎(i=0;‎i<16;‎i++)‎{‎f or(j‎=0;j<‎16;j+‎+)‎{‎i f(Bi‎t map[‎i][j]‎==0)‎{‎l‎e ftbi‎t++;‎}‎}‎}}/‎/判断分配‎外存时候是‎不是足够‎i nt J‎u dgee‎n ough‎(int ‎n){‎if(l‎e ftbi‎t>=n)‎re‎t urn ‎1;e‎l se r‎e turn‎0;}‎//添加‎时候用v‎o id A‎d dpoi‎n t(FC‎B * f‎){‎F CB *‎temp‎;if‎(pres‎e nt->‎s ub==‎N ULL)‎{‎pres‎e nt->‎s ub=f‎;}‎else‎{‎temp‎=pres‎e nt->‎s ub;‎whi‎l e(te‎m p->n‎e xt!=‎N ULL)‎{‎te‎m p=te‎m p->n‎e xt; ‎}‎temp‎->nex‎t=f;‎f->‎n ext=‎N ULL;‎}}‎//删除‎时候用v‎o id D‎e lpoi‎n t(FC‎B *f)‎{F‎C B * ‎t emp=‎p rese‎n t->s‎u b;‎i f(te‎m p==f‎){‎pre‎s ent-‎>sub=‎t emp-‎>next‎;d‎e lete‎(f);‎}e‎l se‎{w‎h ile(‎t emp-‎>next‎!=f)‎{‎tem‎p=tem‎p->ne‎x t;‎}‎t emp-‎>next‎=f->n‎e xt;‎del‎e te(f‎);}‎}//‎查找是不是‎已经存在‎i nt I‎s exis‎t(cha‎r ary‎[],in‎t x)‎{FC‎B * t‎e mp;‎if(p‎r esen‎t->su‎b==NU‎L L)‎{r‎e turn‎0;‎}el‎s e{‎te‎m p=pr‎e sent‎->sub‎;w‎h ile(‎t emp!‎=NULL‎){‎i‎f((!s‎t rcmp‎(temp‎->nam‎e,ary‎))&&(‎t emp-‎>type‎==x))‎{‎‎f indi‎n g=te‎m p;‎re‎t urn ‎1;‎}‎temp‎=temp‎->nex‎t;‎}r‎e turn‎0;‎}}/‎/创建目录‎void‎Mdli‎s t()‎{ch‎a r li‎s tnam‎e[50]‎;ci‎n>>li‎s tnam‎e;F‎C B * ‎t emp;‎if(‎I sexi‎s t(li‎s tnam‎e,0))‎{‎cout‎<<"子目‎录或文件"‎<<lis‎t name‎<<"已存‎在。

实验四 文件管理实验

实验四 文件管理实验

实验四文件管理实验1.实验目的(1)了解文件权限。

(2)学会设置文件权限。

(3)学会管理文件权限。

2. 实验环境Linux操作系统的计算机3. 实验内容步骤1 检查系统核心首先检查你的Linux系统的核心是否有支持ACL的功能。

因为Linux系统并不是每一个版本的核心都有支持ACL的功能,而最简单的方法就是检查系统目前的核心能否支持:[root@mail /]$ cat /boot/config-kernel-version | grep -i ext3CONFIG_EXT3_FS=mCONFIG_EXT3_IDEX=yCONFIG_EXT3_FS_XA TTR_SHARING=yCONFIG_EXT3_FS_XA TTR_USER=yCONFIG_EXT3_FS_XA TTR_TRUSTED=yCONFIG_EXT3_FS_ACL=y上面命令中的kernel-version可在/boot子目录中查到,此时如果能看到上面的几项则表示已经编译到核心中,ext3文件系统已支持ACL功能,这些功能在编译核心选项中都可以找到。

步骤2 设置ACL权限先用su 命令转换到root用户;再在root用户下建立一个子目录[root@mail root]#mkdir /home/fs1将fs1子目录的权限向所有用户开放[root@mail root]#chmod -R 777 /home/fs1让所有的用户都能增加文件到目录的权限ACL常常针对个别用户来进行设置,下面是例子:例如需要创建一个wang1用户,可以先用root身份登录系统,然后执行以下命令创建用户名和密码下述命令中adduser也可是useradd不是内部命令,相应的命令文件在/usr/sbin子目录下,执行时应在命令前加上路径名/usr/sbin:[root@mail root]#adduser wang1[root@mail root]#passwd wang1将wang1 建立的文件设置读写的权限给student:先用wang1登录系统,执行命令:[wang1@mail ]$ cd /home/fs1[wang1@mail fs1]# echo "Create by wang1" > wang1.txt而如下操作则可以让除了wang1有读写的权限外其他人没有读写wang1.txt的权限(root除外),[wang1@mail fs1]# chmod go-r wang1.txt[wang1@mail fs1]# ll wang1.txt-rw------- 1 wang1 wang1 17 Jul 14 22:11 wang1.txt先用student 登录系统后执行以下命令:[student@mail fs1]# cat wang1.txtcat : wang1.txt Permission denied接着用wang1登录系统,执行如下命令:[wang1@mail fs1]# setfacl -m u:student:rw wang1.txt这样就修改权限允许student 有这个文件的读写权限。

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

实验四:文件管理
一、实验目的
1、掌握linux文件保护的原理
2、掌握linux 符号链接、软链接的不同
二.实验环境
一台已经安装好Linux操作系统的主机/或安装过vmware的windows系统。

三.实验内容
内容一:Linux操作系统下帐号管理命令及文件介绍
1、添加用户
2、为用户添加密码
3、锁定账号
4、解锁账号
5、设置账号的过期时间
6、添加组账号
7、指定用户的所属组
8、修改用户的所属组
9、删除组
内容二:Linux操作系统下文件、目录权限管理
1、为用户创建的所有新文件生成一个默认的文件权限 755。

2、改变/opt/local /book/及其子目录下的所有文件的属组为book
3.把文件shiyan.c的所有者改为wan
4.把目录/hi及其下的所有文件和子目录的属主改成wan,属组改成
users。

5.新建一个文件,并将它的权限修改为 rwxrw-r--, 最少列举两种方法:
内容三:硬链接、符号连接
Linux系统中连接文件分为硬连接和符号连接。

硬连接:只是在某一目录下的块多写入一个关联数据,不会用掉incode 与磁盘空间(只有当目录的块被用完,才可能会增加一个块来完成,从而导致磁盘空间发生变化,这样的可能性非常小)。

符号连接:我们可以理解成如Windows的快捷方式。

符号连接是一个独立的新文件,所以占inode与块。

(注:在ext2文件系统中,文件由文件属性块(即indoe talbe)和文件内容块两区域)
实验步骤:
1、 /显示当前目录占用的容量,和磁盘空间大小
命令:结果:
2、使用vi建立一个测试文件test。

内容为“Hello everyone!”
3、显示当前目录占用的容量,和磁盘空间大小
结果:
4、为test创建硬连接文件testh
命令:
5、查看建立硬连接文件后的目录容量和磁盘大小,注意:目录容量磁盘
大小是否改变。

结果:
6、为test创建一个符号连接文件testo文件
命令:
7、查看建立符号连接文件后的目录容量和磁盘大小,注意:目录容量磁
盘大小是否改变。

结果:
8、使用vi修改testh文件的内容,再查看其是否发生改变。

结果:
9、删除test,查看testh和testo内容。

结果:
四、预备知识
1、相关配置文件:
1、/etc/shadow
用户名:加密口令(若为*表示该帐号不能被登入):上一次修改的时间(从1970年1月1日起的天数):口令在两次修改间的最小天数:口令修改之前向用户发出警告的天数:口令终止后账号被禁用的天数:从1970年1月1日起账号被禁用的天数:保留域例:drobbins:$1$1234567890123456789012345678901:11664:0:-1:-1:-1:-1:0
2、/etc/passwd
例:username:password:User ID:Group ID:comment:home directory:shell
3、/etc/group
groupname:x(表示群租密码在/etc/shadow中):GID:usernames
例:root:x:0:root,sunday,onlyisi
4、/etc/inittab 修改启动级别和ctrl-alt-delete 功能
5、/etc/rc.local 可添加需要启动的脚本
6、/etc/fstab 系统挂载信息
7、/etc/skel 是控制用户的缺省目录结构(这个目录下的目录新增用户的宿主目录
就有该目录)
2. du命令详细用法
常用命令: du –a 查询档案或目录的磁盘使用空间
a:显示全部目录和其次目录下的每个档案所占的磁盘空间
b:大小用bytes来表示 (默认值为k bytes)
c:最后再加上总计 (默认值)
s:只显示各档案大小的总合
x:只计算同属同一个档案系统的档案
L:计算所有的档案大小
du 能以指定的目录下的子目录为单位,显示每个目录内所有档案所占用的磁盘空间大小。

使用 -h 参数来显示 human-readable 的格式。

例如:
# du -h /etc
104K /etc/defaults
6.0K /etc/X11
在查看目录的使用情形时,我们可以将输出结果导到 sort 指令进行排序,以了解哪个档案用了最多的空间:
# du /etc | sort -nr | more
1746 /etc
388 /etc/mail
318 /etc/rc.d
3. df命令详细用法
常用命令:df –hi
a:显示全部的档案系统和各分割区的磁盘使用情形
i:显示i -nodes的使用量
k:大小用k来表示 (默认值)
t:显示某一个档案系统的所有分割区磁盘使用量
x:显示不是某一个档案系统的所有分割区磁盘使用量
T:显示每个分割区所属的档案系统名称
指令 df 可以显示目前所有档案系统的最大可用空间及使用情形,请看下列这个例子:# df –h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
37G 3.6G 32G 11% /
/dev/sda1 99M 12M 83M 13% /boot
tmpfs 506M 0 506M 0% /dev/shm
五实验步骤及分析
内容一:Linux操作系统下帐号管理命令及文件介绍
1、添加用户:#useradd sunguoli
2、为用户添加密码:#passwd sunguoli(密码:123456)
3、锁定账号:#usermod –L sunguoli
4、解锁账号:#usermod –U sunguoli
5、设置账号的过期时间:#usermod –e 2011-7-1 sunguoli
6、添加组账号:#groupadd sgl
7、指定用户的所属组:#useradd –g sgl sunguoli
8、修改用户的所属组:#usermod –g sgl sunguoli
9、删除组:#groupdel sgl
解释:若要用上述口令删除一个组,则要先将该组中的用户删掉.
内容二:Linux操作系统下文件、目录权限管理
1、为用户创建的所有新文件生成一个默认的文件权限 755
解释:用户可以使用umask命令设置文件夹的默认生成掩码。

默认的生成掩码告诉系统当创建一个文件或目录时不应该赋予
哪些权限。

如果用户将umask命令放在环境文件
(.bash_profile)中,就可以控制所有的新建文件或目录的访问权限。

其命令格式为:umask [u1u2u3]
其中,u1、u2、u3分别表示的是不允许属主有的权限、不允许同组人有的权限和不允许其他人有的权限。

例如:
umask 022 //设置不允许同组用户和其他用户有
写权限
umask //显示当前的默认生成掩码。

2、改变/opt/local /book/及其子目录下的所有文件的属组
为book
3.把文件shiyan.c的所有者改为sunsun.
4.把目录sun及其下的所有文件和子目录的属主改成sunsun,属组改成user。

5.新建一个文件,并将它的权限修改为 rwxrw-r--, 最少列举两种方法:
解释:可知以上权限为764:
方法一:chmod 764 sunguoli.c
方法二:umask 13
内容三:硬链接、符号连接
1、显示当前目录占用的容量,和磁盘空间大小
# du -sb ; df –i
2、使用vi建立一个测试文件test。

内容为“Hello everyone!”
3、显示当前目录占用的容量,和磁盘空间大小
4、为test创建硬连接文件testh
5、查看建立硬连接文件后的目录容量和磁盘大小,注意:目录容量磁盘大小是否改变。

6、为test创建一个符号连接文件testo文件
7、查看建立符号连接文件后的目录容量和磁盘大小,注意:目录容量磁盘大小是否改变。

8、使用vi修改testh文件的内容,再查看其是否发生改变。

添加如下内容:
9删除test,查看testh和testo内容。

相关文档
最新文档