实验5 文件系统
文件系统实验报告
![文件系统实验报告](https://img.taocdn.com/s3/m/a9ac1a8abceb19e8b8f6ba83.png)
嵌入式系统实验报告(二)--嵌入式文件系统的构建138352019陈霖坤一实验目的了解嵌入式操作系统中文件系统的类型和作用了解JFFS2文件系统的优点及其在嵌入式系统中的作用掌握利用Busybox软件制作嵌入式文件系统的方法掌握嵌入式linux文件系统的挂载过程二实验内容与要求编译BusyBox,以BusyBox为基础,构建一个适合的文件系统;制作ramdisk文件系统映像,用你的文件系统启动到正常工作状态;研究NFS作为根文件系统的启动过程。
三Busybox介绍BusyBox最初是由Bruce Perens在1996年为Debian GNU/Linux安装盘编写的,其原始构想是希望在一张软盘上能放入一个开机系统,以作为急救盘和安装盘。
后来它变成了嵌入式Linux设备和系统和Linux发布版安装程序的实质标准,因为每个Linux可执行文件需要数Kb的空间,而集成两百多个程序的BusyBox可以节省大量空间。
Busybox集成了包括mini-vi编辑器、/sbin/init、文件操作、目录操作、系统配置等应用程序。
Busybox支持多种体系结构,可以选择静态或动态链接,以满足不同需要。
四linux文件系统文件系统是对一个存储设备上的数据和元数据进行组织的机制,linux文件系统接口设计为分层的体系结构,从而将用户接口层、文件系统实现层和操作存储设备的驱动程序分隔开。
在文件系统方面,linux可以算得上操作系统中的“瑞士军刀”。
Linux支持许多种文件系统,从日志型文件系统到集群文件系统和加密文件系统,而且对于使用标准的和比较奇特的文件系统以及开发文件系统来说,linux是极好的平台,这得益于linux内核中的虚拟文件系统(VFS,也称虚拟文件系统交换器)。
文件结构Windows的文件结构是多个并列的树状结构,不同的磁盘分区各对应一个树。
Linux的文件结构是单个的树,最上层是根目录,其它目录都从根目录生成。
实验5 文件系统的使用
![实验5 文件系统的使用](https://img.taocdn.com/s3/m/241676dd33d4b14e852468ab.png)
实验5文件系统的使用
1.实验目的:
1)熟悉Linux操作系统中的文件与目录管理的概念。
2)掌握Linux操作系统中常用文件管理指令。
3)掌握硬连接和软连接的建立及使用。
4)进一步了解文件系统结构。
2.实验准备:
1)熟悉ls、mkdir、rmdir、cd、mv、rm、cp等文件目录管理指令
2)熟悉ln指令的使用
3)了解df、du、fdisk、gzip、gunzip、tar等磁盘管理指令
3.实验步骤:
1.登陆后察看文件系统的基本目录结构。
了解各主要目录。
2.用ln指令分别对文件建立硬连接和软连接。
按课本例子一一实现,注意硬连接和软连接的区
别。
3.使用df、du、fdisk察看系统中磁盘及文件系统的使用状况。
(注意查看帮助)
4.对命令中出现的各种特殊字符有正确的理解。
可参照课本例子实现。
4实验总结:
认真填写实验报告。
文件系统实验报告
![文件系统实验报告](https://img.taocdn.com/s3/m/cfef354e3d1ec5da50e2524de518964bcf84d2ac.png)
文件系统实验报告文件系统实验报告篇一:内核,文件系统实验报告一嵌入式系统实验报告(一) 091180083刘浩通信工程一、实验目的了解嵌入式系统的开发环境,内核的下载和启动过程;了解Linux内核源代码的目录结构及相关内容;了解Linux内核各配置选项的内容和作用;掌握Linux内核的编译过程;理解嵌入式操作系统文件系统的类型和作用;了解jffs2文件系统的优点及其在嵌入式系统中的作用;掌握busybx软件制作嵌入式文件系统的方法;掌握Linux嵌入式文件系统的挂载过程。
二、嵌入式系统开发实验1、mini和tftp(1)串口通信的硬件基础:嵌入式系统一般通过异步串行接口(UART)进行初级引导。
本实验中用到的是RS-232C标准的接口。
(2)软件结构:mini 运行mini,Ctrl+A-进入mini的cnfiguratin界面。
对串行通信接口进行配置,如串行通信口的设置,波特率、数据位等串口参数的设置。
保存好设置后以后可以不用再设置。
(3)btlader引导:给开发板加电,任意按下一个键进入btlader界面。
可以通过命令行方式进行设置,按0进入命令行模式,出现 51bard,可以设置开发板和pc机的ip地址:set myipaddr 192.168.207.113(设置开发板的ip地址),set destipaddr 192.168.207.13(设置pc机的ip地址)。
注意ip地址的设置:使其处于同一网段,并且避免和其他系统的ip发生冲突。
(4)通过btlader的主菜单可以完成很多功能,3——下载内核,4——将内核烧进flash,5——下载文件系统,6——将文件系统烧进flash,7——启动嵌入式操作系统等。
由于btlader需要从服务器上下载内核和文件系统,一般采用tftp服务。
进入/etc/xinetd.d/tftp修改配置,注意一定要关闭防火墙,否则可能导致下载时出问题。
再设置完后要重新启动tftp服务。
简单文件系统模拟实验
![简单文件系统模拟实验](https://img.taocdn.com/s3/m/2436afab960590c69ec37634.png)
简单文件系统模拟实验实验目的通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统功能和实现过程的理解。
实验内容▪在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简单的单用户文件系统。
在退出这个简单文件系统时,应将该虚拟文件系统保存到磁盘上,以便下次可以再将它恢复到内存的虚拟磁盘上。
▪文件存储空间的分配可以采用显式链接分配或其它方法。
▪空闲空间的管理可以选择位示图或其它方法。
如果采用位示图来管理文件存储空间,并采用显式链接分配方式,可以将位示图合并到FAT中。
▪文件目录结构采用多级目录结构。
为简单起见,可以不使用索引结点,其中的每个目录项包含文件名、物理地址、文件长度等信息,还可以通过目录项实现对文件读和写的保护。
▪要求提供以下有关的文件操作:✧Format:对文件存储器进行格式化,即按照文件系统的结构对虚拟磁盘空间进行布局,并在其上创建根目录以及用于管理文件存储空间等的数据结构。
✧Mkdir:用于创建子目录。
✧Rmdir:用于删除子目录。
✧Ls:用于显示目录。
✧Cd:用于更改当前目录。
✧Create:用于创建文件。
✧Open:用于打开文件。
✧Close:用于关闭文件。
✧Write:用于写文件。
✧Read:用于读文件。
✧Rm:用于删除文件。
数据结构设计磁盘:整个磁盘为一个char数组,数组中的每一个元素当做是一个扇区,每个扇区可以存储1个字节的信息,簇大小为8字节。
FAT表:存储的是指定编号的簇的下一个簇的编号是什么,因为文件是有可能分散在很多的簇里。
文件和文件夹链表:设计为静态链表,每个文件夹都会有一个子目录列表,存在链表中。
文件和目录表:文件和目录相同对待,信息存放在文件目录表中,为一个数组类型。
以上所有的信息存放在一个fs结构体中,所有的结构都为静态实现,所以需要将文件系统存放到磁盘中的时候只需要将整个结构体以二进制性质存放到文件中或者是将从文件中以二进制形式读取。
文件系统实验
![文件系统实验](https://img.taocdn.com/s3/m/38afe5f34693daef5ef73d00.png)
6.1 二级目录文件系统设计6.1.1 目的和要求本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。
6.1.2 实验内容为DOS系统设计一个简单的二级文件系统。
要求做到以下几点:(1)可以实现下列几条命令LOGIN 用户登陆DIR 列文件目录CREATE 创建文件DELETE 删除文件OPEN 打开文件CLOSE 关闭文件READ 读文件WRITE 写文件(2)列目录时要列出文件名,物理地址,保护码和文件长度。
(3)源文件可以进行读写保护。
6.1.3 实验环境(1)PC兼容机(2)Windows、DOS系统(3)TC语言6.1.4 实验提示(1)首先应确定文件系统的数据结构:主目录、子目录及活动文件等。
主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。
(2)用户创建的文件,可以编号存储于磁盘上。
如:file0,file1,file2…并以编号作为物理地址,在目录中进行登记。
6.1.5 实验参考代码参考程序见下(本程序需要在c:下建一个名为osfile的目录及一个名为file的子目录):#include "stdio.h"#include "string.h"#include "conio.h"#include "stdlib.h"#define MAXNAME 25 /*the largest length of mfdname,ufdname,filename*/#define MAXCHILD 50 /*the largest child*/#define MAX (MAXCHILD*MAXCHILD) /*the size of fpaddrno*/typedef struct /*the structure of OSFILE*/{int fpaddr; /*file physical address*/int flength; /*file length*/int fmode; /*file mode:0-Read Only;1-Write Only;2-Read and Write(default);*/ char fname[MAXNAME]; /*file name*/} OSFILE;typedef struct /*the structure of OSUFD*/{char ufdname[MAXNAME]; /*ufd name*/OSFILE ufdfile[MAXCHILD]; /*ufd own file*/}OSUFD;typedef struct /*the structure of OSUFD'LOGIN*/{char ufdname[MAXNAME]; /*ufd name*/char ufdpword[8]; /*ufd password*/} OSUFD_LOGIN;typedef struct /*file open mode*/{int ifopen; /*ifopen:0-close,1-open*/int openmode; /*0-read only,1-write only,2-read and write,3-initial*/}OSUFD_OPENMODE;OSUFD *ufd[MAXCHILD]; /*ufd and ufd own files*/OSUFD_LOGIN ufd_lp;int ucount=0; /*the count of mfd's ufds*/int fcount[MAXCHILD]; /*the count of ufd's files*/int loginsuc=0; /*whether login successfully*/char username[MAXNAME]; /*record login user's name22*/char dirname[MAXNAME];/*record current directory*/int fpaddrno[MAX]; /*record file physical address num*/OSUFD_OPENMODE ifopen[MAXCHILD][MAXCHILD]; /*record file open/close*/ int wgetchar; /*whether getchar()*/FILE *fp_mfd,*fp_ufd,*fp_file_p,*fp_file;void main(){int i,j,choice1;char choice[50]; /*choice operation:dir,create,delete,open,delete,modify,read,write*/ int choiceend=1; /*whether choice end*/char *rtrim(char *str); /*remove the trailing blanks.*/char *ltrim(char *str); /*remove the heading blanks.*/void LoginF(); /*LOGIN FileSystem*/void DirF(); /*Dir FileSystem*/void CdF(); /*Change Dir*/void CreateF(); /*Create File*/void DeleteF(); /*Delete File*/void ModifyFM(); /*Modify FileMode*/void OpenF(); /*Open File*/void CloseF(); /*Close File*/void ReadF(); /*Read File*/void WriteF(); /*Write File*/void QuitF(); /*Quit FileSystem*/void help();if((fp_mfd=fopen("c:\\osfile\\mfd","rb"))==NULL){fp_mfd=fopen("c:\\osfile\\mfd","wb");fclose(fp_mfd);}for(i=0;i<MAX;i++) fpaddrno[i]=0;// textattr(BLACK*16|WHITE);system("cls");// clrscr(); /*clear screen*/LoginF(); /*user login*///clrscr();system("cls");if(loginsuc==1) /*Login Successfully*/{while (1){wgetchar=0;if (choiceend==1){printf("\n\nC:\\%s>",strupr(dirname));} //strupr将所有小写字母转换成大写else printf("Bad command or file name.\nC:\\%s>",strupr(username));gets(choice);strcpy(choice,ltrim(rtrim(strlwr(choice)))); //strlwr将所有大写字母转换成小写if (strcmp(choice,"dir")==0) choice1=1;else if(strcmp(choice,"creat")==0) choice1=2;else if(strcmp(choice,"delete")==0) choice1=3;else if(strcmp(choice,"attrib")==0) choice1=4;else if(strcmp(choice,"open")==0) choice1=5;else if(strcmp(choice,"close")==0) choice1=6;else if(strcmp(choice,"read")==0) choice1=7;else if(strcmp(choice,"modify")==0) choice1=8;else if(strcmp(choice,"exit")==0) choice1=9;else if(strcmp(choice,"cls")==0) choice1=10;else if(strcmp(choice,"cd")==0) choice1=11;else if(strcmp(choice,"help")==0) choice1=20;else choice1=12;switch(choice1){case 1:DirF();choiceend=1;break;case 2:CreateF();choiceend=1;if(!wgetchar) getchar();break;case 3:DeleteF();choiceend=1;if(!wgetchar)getchar();break;case 4:ModifyFM();choiceend=1;if(!wgetchar) getchar();break;case 5:choiceend=1;OpenF();if (!wgetchar) getchar();break;case 6:choiceend=1;CloseF();if (!wgetchar) getchar();break;case 7:choiceend=1;ReadF();if (!wgetchar) getchar();break;case 8:choiceend=1;WriteF();if (!wgetchar) getchar();break;case 9:printf("\nYou have exited this system.");QuitF();exit(0);break;case 10:choiceend=1; system("cls"); /*clrscr();*/break;case 11:CdF();choiceend=1;break;case 20:help();choiceend=1;break;default:choiceend=0;}}}else printf("\nAccess denied.");}void help(void){printf("\nThe Command List\n");printf("\nCd Attrib Creat Modify Read Open Cls Delete Exit Close\n"); }char *rtrim(char *str) /*remove the trailing blanks.*/{int n=strlen(str)-1;while(n>=0){if(*(str+n)!=' '){*(str+n+1)='\0';break;}else n--;}if (n<0) str[0]='\0';return str;}char *ltrim(char *str) /*remove the heading blanks.*/{char *rtrim(char *str);strrev(str); //将所有字母反向排列rtrim(str);strrev(str);return str;}void LoginF() /*LOGIN FileSystem*/{char loginame[MAXNAME],loginpw[9],logincpw[9],str[50];int i,j,flag=1;char a[25];int findout; /*login user not exist*/char *rtrim(char *str); /*remove the trailing blanks.*/char *ltrim(char *str); /*remove the heading blanks.*/void InputPW(char *password); /*input password,use '*' replace*/void SetPANo(int RorW); /*Set physical address num*/while(1){findout=0;printf("\n\nLogin Name:");gets(loginame);ltrim(rtrim(loginame));fp_mfd=fopen("c:\\osfile\\mfd","rb");for(i=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!=0;i++)if (strcmp(strupr(ufd_lp.ufdname),strupr(loginame))==0){findout=1;strcpy(logincpw,ufd_lp.ufdpword);}fclose(fp_mfd);if (findout==1) /*user exist*/{printf("Login Password:");InputPW(loginpw); /*input password,use '*' replace*/if (strcmp(loginpw,logincpw)==0){strcpy(username,strupr(loginame));strcpy(dirname,username);fp_mfd=fopen("c:\\osfile\\mfd","rb");for(j=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!=0;j++){strcpy(str,"c:\\osfile\\");strcat(str,ufd_lp.ufdname); //strcat字符串连接函数ufd[j]=(OSUFD*)malloc(sizeof(OSUFD));strcpy(ufd[j]->ufdname,strupr(ufd_lp.ufdname));fp_ufd=fopen(str,"rb");fcount[j]=0;for(i=0;fread(&ufd[j]->ufdfile[i],sizeof(OSFILE),1,fp_ufd)!=0;i++,fcount[j]++){ifopen[j][i].ifopen=0;ifopen[j][i].openmode=4;}fclose(fp_ufd);}fclose(fp_mfd);ucount=j;SetPANo(0);printf("\n\nLogin successful! Welcome to this FileSystem\n\n");loginsuc=1;return;}else{printf("\n\n");flag=1;while(flag){printf("Login Failed! Password Error. Try Again(Y/N):");gets(a);ltrim(rtrim(a));if (strcmp(strupr(a),"Y")==0) {loginsuc=0;flag=0;}else if(strcmp(strupr(a),"N")==0){loginsuc=0;flag=0;return;}}}}else{printf("New Password(<=8):");InputPW(loginpw); /*input new password,use '*' replace*/printf("\nConfirm Password(<=8):"); /*input new password,use '*' replace*/ InputPW(logincpw);if (strcmp(loginpw,logincpw)==0){strcpy(ufd_lp.ufdname,strupr(loginame));strcpy(ufd_lp.ufdpword,loginpw);fp_mfd=fopen("c:\\osfile\\mfd","ab");fwrite(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd);fclose(fp_mfd);strcpy(username,strupr(loginame));strcpy(dirname,loginame);strcpy(str,"c:\\osfile\\");strcat(str,username);if((fp_ufd=fopen(str,"rb"))==NULL){fp_ufd=fopen(str,"wb");fclose(fp_ufd);}fp_mfd=fopen("c:\\osfile\\mfd","rb");for(j=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!=0;j++) {strcpy(str,"c:\\osfile\\");strcat(str,ufd_lp.ufdname);ufd[j]=(OSUFD*)malloc(sizeof(OSUFD));strcpy(ufd[j]->ufdname,strupr(ufd_lp.ufdname));fp_ufd=fopen(str,"rb");for(i=0;fread(&ufd[j]->ufdfile[i],sizeof(OSFILE),1,fp_ufd)!=0;i++,fcount[j]++){ifopen[j][i].ifopen=0;ifopen[j][i].openmode=4;}fclose(fp_ufd);}fclose(fp_mfd);ucount=j;SetPANo(0);printf("\n\nLogin Successful! Welcome to this System\n\n");loginsuc=1;return;}else{printf("\n\n");flag=1;while(flag){printf("Login Failed! Password Error. Try Again(Y/N):");gets(a);ltrim(rtrim(a));if (strcmp(strupr(a),"Y")==0) {loginsuc=0;flag=0;}else if(strcmp(strupr(a),"N")==0){loginsuc=0;flag=0;return;}}}}}}void SetPANo(int RorW) /*Set physical address num,0-read,1-write*/{int i,j;if (RorW==0){if((fp_file_p=fopen("c:\\osfile\\file\\file_p","rb"))==NULL){fp_file_p=fopen("c:\\osfile\\file\\file_p","wb");fclose(fp_file_p);}fp_file_p=fopen("c:\\osfile\\file\\file_p","rb");for(i=0;fread(&j,sizeof(int),1,fp_file_p)!=0;i++)fpaddrno[j]=1;/*for(i=1;i<MAX;i++)if ((i%13)==0) fpaddrno[i]=1;*/}else{fp_file_p=fopen("c:\\osfile\\file\\file_p","wb");/*for(i=1;i<MAX;i++)if((i%13)==0) fpaddrno[i]=0;*/for(i=0;i<MAX;i++)if (fpaddrno[i]==1)fwrite(&i,sizeof(int),1,fp_file_p);}fclose(fp_file_p);}void InputPW(char *password) /*input password,use '*' replace*/{int j;for(j=0;j<=7;j++){password[j]=getch();if ((int)(password[j])!=13){if((int)(password[j])!=8)putchar('*');else{if (j>0){j--;j--;putchar('\b');putchar(' ');putchar('\b');}else j--;}}else{password[j]='\0';break;}}password[j]='\0';}void DirF() /*Dir FileSystem*/{int i,j,count=0;char sfmode[25],sfpaddr[25],str[25];int ExistD(char *dirname); /*Whether DirName Exist,Exist-i,Not Exist-0*///clrscr();system("cls");if (strcmp(strupr(ltrim(rtrim(dirname))),"")!=0){printf("\n\nC:\\%s>dir\n",dirname);printf("\n%14s%16s%14s%10s%18s\n","FileName","FileAddress","FileLength","Type","FileMode"); j=ExistD(dirname);for(i=0;i<fcount[j];i++){if ((i%16==0)&&(i!=0)){printf("\nPress any key to continue..");getch();//clrscr();system("cls");printf("\n%14s%16s%14s%10s%18s\n","FileName","FileAddress","FileLength","Type","FileMode");}itoa(ufd[j]->ufdfile[i].fpaddr,str,10);strcpy(sfpaddr,"file");strcat(sfpaddr,str);if (ufd[j]->ufdfile[i].fmode==0) strcpy(sfmode,"Read Only");else if(ufd[j]->ufdfile[i].fmode==1) strcpy(sfmode,"Write Only");else if(ufd[j]->ufdfile[i].fmode==2)strcpy(sfmode,"Read And Write");else strcpy(sfmode,"Protect");printf("%14s%16s%14d%10s%18s\n",ufd[j]->ufdfile[i].fname,sfpaddr,ufd[j]->ufdfile[i].flength," <FILE>",sfmode);}printf("\n %3d file(s)\n",fcount[j]);}else{printf("\n\nC:\\>dir\n");printf("\n%14s%18s%8s\n","DirName","OwnFileCount","Type");for(i=0;i<ucount;i++){if ((i%16==0)&&(i!=0)){printf("\nPress any key to continue...");getch();// clrscr();system("cls");printf("\n%14s%18s%8s\n","DirName","OwnFileCount","Type");}printf("%14s%18d%8s\n",ufd[i]->ufdname,fcount[i],"<UFD>");count=count+fcount[i];}printf("\n %3d dir(s),%5d file(s)\n",ucount,count);}}int ExistD(char *dirname) /*Whether DirName Exist,Exist-i,Not Exist-0*/{int i;int exist=0;for(i=0;i<ucount;i++)if (strcmp(strupr(ufd[i]->ufdname),strupr(dirname))==0){exist=1;break;}if (exist) return(i);else return(-1);}void CdF() /*Exchange Dir*/{char dname[MAXNAME];char *rtrim(char *str); /*remove the trailing blanks.*/char *ltrim(char *str); /*remove the heading blanks.*/int ExistD(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/printf("\nPlease input DirName (cd..-Previous dir; DirNAME-cd [DirNAME]):");gets(dname);ltrim(rtrim(dname));if (ExistD(dname)>=0) strcpy(dirname,strupr(dname));else if(strcmp(strupr(dname),"CD..")==0) strcpy(ltrim(rtrim(dirname)),"");else printf("\nError.\'%s\' does not exist.\n",dname);}void CreateF() /*Create File*/{int fpaddrno,flag=1,i;char fname[MAXNAME],str[50],str1[50],strtext[255],a[25];char fmode[25];char *rtrim(char *str); /*remove the trailing blanks.*/char *ltrim(char *str); /*remove the heading blanks.*/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 ModifyFM() /*Modify FileMode*/{char fname[MAXNAME],str[50];int i,j,k,flag;char fmode[25]; /*whether delete*/char *rtrim(char *str); /*remove the trailing blanks.*/char *ltrim(char *str); /*remove the heading blanks.*/void InputPW(char *password); /*input password,use '*' replace*/void SetPANo(int RorW); /*Set physical address num*/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 modify filemode in yourself 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 modify.\n",fname);wgetchar=1;}else{if(ufd[k]->ufdfile[i].fmode==0) strcpy(str,"read only"); /*FileMode*/else if(ufd[k]->ufdfile[i].fmode==1) strcpy(str,"write only");else if(ufd[k]->ufdfile[i].fmode==2) strcpy(str,"read and write");else strcpy(str,"Protect");printf("\'%s\' filemode is %s.\n",fname,strupr(str));printf("Modify to(0-read only,1-write only,2-read and write,3-Protect):");gets(fmode);ltrim(rtrim(fmode));if(strcmp(fmode,"0")==0){ufd[k]->ufdfile[i].fmode=0;printf("\n\'%s\' has been modified to READ ONLY mode successfully.\n",fname);wgetchar=1;}else if(strcmp(fmode,"1")==0){ufd[k]->ufdfile[i].fmode=1;printf("\n\'%s\' has been modified to WRITE ONLY mode successfully.\n",fname);wgetchar=1;}else if(strcmp(fmode,"2")==0){ufd[k]->ufdfile[i].fmode=2;printf("\n\'%s\' has been modified to READ AND WRITE mode successfully.\n",fname);wgetchar=1;}else if(strcmp(fmode,"3")==0){ufd[k]->ufdfile[i].fmode=3;printf("\n\'%s\' has been modified to FORBID mode successfully.\n",fname);wgetchar=1;}else {printf("\nError.\'%s\' is not modified.\n",fname);wgetchar=1;}}}else{printf("\nError. \'%s\' dose 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 before read\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");}。
实验五-文件系统实验
![实验五-文件系统实验](https://img.taocdn.com/s3/m/94540531ccbff121dc36830d.png)
实验五 EXT4文件系统结构分析一、实验目的:掌握文件系统的工作机理;理解文件系统的主要数据结构;学习较为复杂的Linux下的编程;了解EXT4文件系统的结构。
二、实验平台:虚拟机:VMWare9操作系统:Ubuntu12.04文件系统:EXT4编辑器:Gedit | Vi三、实验内容:(1)该实验要求编写程序,完成以下功能(注意保存截图):1、查看主硬盘设备名、挂载目录及文件系统信息2、程序编译进入check_ext4fs目录,输入 make clean; make编译程序,生成check_ext4fs程序:获取ext4文件系统超级块,并显示超级块数据结构ext4_super_block的字段信息;获取块组描述符表,并能根据输入的块组号显示该块组描述符ext4_group_desc的字段信息;先获取组块描述表info groups [1, 33]获取索引节点表,并能根据输入的索引节点号(比如根目录文件的索引节点号是2),显示其索引节点数据结构ext4_inode的字段信息。
(2)分析上述实验代码,回答下列问题:大小(单位用字节):逻辑块、超级块ext4_super_block、组描述符ext4_group_desc、索引节点ext4_inode;逻辑块大小4096、超级块大小、组描述符ext4_group_desc大小512块、索引节点大小256字节个数及位置:块组0中组描述符占用的块数708及所占块号1057-1568、inode个数及inode表占用的块数1057、块位图block bitmap占用块数1025及所在块号1025、索引节点位图inode bitmap占用块数1041及所在块号1041;验证:执行sudo dumpe2fs /dev/sda1 | more命令,验证上述分析是否正确。
实验总结这次实验中,我了解了文件系统的基本工作原理,也明白了文件系统的主要数据结构,了解了EXT4文件系统的结构。
文件系统的构建实验报告
![文件系统的构建实验报告](https://img.taocdn.com/s3/m/4849402d7375a417866f8f85.png)
文件系统的构建实验报告 实验名称:文件系统的构建实验目的:掌握磁盘的工作原理和操作系统进行文件管理的原理实验原理:硬盘的MBR :MBR (Main Boot Record ),按其字面上的理解即为主引导记录区,位于整个硬盘的0磁道0柱面1扇区。
在总共512字节的主引导扇区中,MBR 只占用了其中的446个字节(偏移0000--偏移01BD ),另外的64个字节(偏移01BE--偏移01FD )交给了DPT(Disk Partition Table 硬盘分区表),最后两个字节"55,AA"(偏移01FE- 偏移01FF )是分区的结束标志。
这个整体构成了硬盘的主引导扇区。
硬盘依据分区表中的信息把硬盘划分为最多四个分区(对于扩展分区,可进一步划分为多个逻辑分区)。
U 盘采用类似的方法划分分区。
每个分区或软盘上可建立独立的文件系统。
下图是FAT 文件系统空间分布结构。
实验内容:在掌握磁盘的工作原理和操作系统进行文件管理原理的基础上,自行设计实现在磁盘上建立文件系统的软件,该软件应该具有与Format 类似的功能,至少支持一种文件系统格式,如FAT 、NTFS 或EXT2,至少能够对一种媒体进行格式化,如软盘,U 盘或硬盘(不得在实验室的机器上进行硬盘格式化的实验)等。
不能直接调用操作系统提供的格式化工具或类似SHFormatDrive ()的高层系统函数实现该软件。
在Windows 环境可使用biosdisk()函数完成底层盘操作,在Linux 环境上可参考format 的源代码。
比较自己设计实现的软件.与FORMAT ,分析存在什么异同。
背景知识介绍 一个分区或磁盘能作为文件系统使用前,需要初始化,并将记录数据结构写到磁盘上。
这个过程就叫建立文件系统。
大部分linux 文件系统种类具有类似的通用结构。
其中心概念是超级块superblock, i 节点inode, 数据块data block,目录块directory block, 和间接块indirection block 。
操作系统实验五-文件系统
![操作系统实验五-文件系统](https://img.taocdn.com/s3/m/cefaaefd284ac850ad02429c.png)
计算机科学与技术学院2018-2019学年第一学期《操作系统》实验报告班级: XXXXXXX学号: XXXXXXXXX姓名: XXX教师: XXX成绩:1. 题目分析设计目的深入了解磁盘文件系统的实现。
设计内容(1)设计一个简单的文件系统,用文件模拟磁盘,用数组模拟缓冲区,要求实现:(2)支持多级目录结构,支持文件的绝对读路径;(3)文件的逻辑结构采用流式结构,物理结构采用链接结构中的显示链接方式;(4)采用文件分配表;(5)实现的命令包括建立目录、列目录、删除空目录、建立文件、删除文件、显示文件内容、打开文件、读文件、写文件(追加方式)、关闭文件、改变文件属性。
(6)最后编写主函数对所做工作进行测试。
相关知识概述(1)文件的操作:①创建文件;②删除文件;③读文件;④写文件;⑤设置文件读/写位置。
(2)文件的逻辑结构:从用户的观点出发所能观察到的文件组织形式,即问价是由一系列的逻辑记录组成的,是用户可以直接处理的数据及其结构。
文件的物理结构:系统将文件存储在外存上所形成的一种存储组织形式,用户不可见。
(3)磁盘空间的管理:采取合理的文件分配方式,为每个文件分配必要的存储空间,使每个文件都能“各得其所”,并能有效减少磁盘碎片。
(4)磁盘目录结构2. 实验设计基本设计思路用一个文件模拟磁盘:FAT 根目录目录1目录2目录3目录4…文件1文件2…文件分配表FAT(128B):第几项0 1 2 3 4 5 6 7 8 9 …内容-1 -1 -1 4 9 0 7 8 -1 12 …根目录(64B)目录1(64B)目录6(64B)目录……….实验中,模拟的磁盘有128块,每块64B,故文件分配表有128项,每项3一个字节,共占磁盘的前两块,盘块编号0、1;根目录紧邻在文件分配表后面,占编号为2的盘块。
01234567891011128B8B8B8B8B8B8B8B文件管理系统要实现的功能包括:(1)磁盘操作:①磁盘分配(2)目录操作:①建立目录②显示目录内容③删除空目录(3)文件操作:①建立文件②打开文件③关闭文件④读文件⑤写文件⑥删除文件(磁盘回收)⑦显示文件内容⑧改变文件属性⑨使用绝对路径名查找文件(4)对数据结构——已打开文件表的操作:①在已打开文件表中查找某文件②将文件从已打开文件表中删除③将某文件插入已打开文件表主要数据结构描述1、每个目录项的数据结构(8B):typedef struct{char name[3];开始找到文件分配表第x项,i=x第i项值是否为第i项是否为最后一项磁盘满,分配失败结束i=i+1分配第i块NYNY图2-10分配一个磁盘块的流程图结束查找路径名为pname的文件i=0i为已打开文件表一栏查找成功结束查找失败i=i+1文件路径名相符NNYY图2-13 在已打开文件表中查找某文件开始删除路径名为n ame 的文件在已打开文件表中查找路径名为n ame的登记项i找到该文件登记项删除第i项:[i]=openfile[]=结束文件没有打开,删除失败NY结束插入路径名为n ame的文件在已打开文件表中查找路径名为n ame的登记项找到该文件登记项已打开文件表已满文件登记表满,无法打开文件结束在[length]处填写该文件的各项内容:=+1文件已打开YNYN图2-15将某文件插入已打开文件表的流程图图2-14 将某文件从已打开文件表中删除的流程开始 关闭文件路径名为 name 的文件 查找已打开文件表文件打开 追加文件结束符修改目录中文件长度 结束文件未打开, 无法关闭文件结束在已打开文件表中删 除该文件登记项操作为 “ 写 ”NNY Y图 2-20模拟关闭文件的流程图开始读 n ame 文件 l ength 字节查找已打开文件表文件打开文件以读方式打开从已打开文件表的到读指针 :将盘块d um 读入缓冲 b uffer1 文件未打开 , 无法读文件结束文件不能读结束t=0文件未结束且 t<=length显示读出内容; 修改读指针的 b unum: bnum=bnum+1t=t+1读完一个盘块修改读指针 bnum=0;: dnum= 文件分配表第 n um 项将盘块 d num 读入缓冲 b uffer1读文件结束 结束NYNNNYYY结束显示路径名为name的文件查找目录n ame找到该文件文件打开dnum=该目录起始盘块号第d num块是该文件一块第d num块内容读入buffer1显示b uffer1中的内容结束或到文件结束符dnum=FAT 第d num项结束结束文件打开,显示文件失败结束指定的文件不存在,显示文件内容失败NYNYNY编码实现实现过程总结部分功能代码:(1)目录操作:①建立目录:int md(char *pathName, char *contentName, char address) ame[0] = '$';}fseek(fc, address * 64, SEEK_SET);fwrite(contentBuffer, 64L, 1, fc);return 1; ttribute == 8) ame << endl;cout << "类型:空" << endl;cout << "属性:目录项" << endl;cout << "起始地址:" << (int)contentBuffer[i].address << endl;cout << "长度:1" << endl << endl;}else if (contentBuffer[i].name[0] == '$'){cout << "一个空的目录登记项" << endl;}else{cout << "名字:" << contentBuffer[i].name << endl;cout << "类型:" << contentBuffer[i].type << endl;if (contentBuffer[i].attribute == 3){cout << "属性:只读系统文件" << endl;}else{cout << "属性:可读可写的普通文件" << endl;}cout << "起始地址:" << (int)contentBuffer[i].address << endl;cout << "长度" << (int)contentBuffer[i].length << endl << endl;}}}(2)文件操作:①建立文件:bool create_file(){ttribute;= temp->address;= temp->length;= flag;pointer read, write;= dnum;= 0;= dnum;= 0;= write;= read;(cu);return 3;}③关闭文件:int close_file(char *pathName){list<OFILE>::iterator it;int i = 0;for (it = (); it != ();){if (strcmp(it->name, pathName) == 0){it = (it);return 1;}else{++it;}}return 0;}④读文件:bool read_file(char *pathName){int a;unsigned char c;bool flag = false;OFILE exist;list<OFILE>::iterator it;int i = 0;for (it = (); it != (); it++){if (strcmp(it->name, pathName) == 0){exist = *it;flag = true;break;}}if (flag == false){return flag;}int dnumTemp = fseek(fc, 64 * SEEK_SET);for (i = 0; i < ; i++){cout << "第" << << "个盘块内容如下:" << endl;while{if % 8 == 0){cout << endl;}c = getc(fc);a = c;cout << hex << " " << a;}= 0;fseek(fc, SEEK_SET);c = getc(fc);if (c == 255){cout << "文件末尾" << endl;break;}= c;fseek(fc, * 64, SEEK_SET);cout << endl;}return flag;}⑤写文件:bool write_file(char *pathName){int dnum; ;type = (pointPosition + 1, ());everyPath = (0, pointPosition);}结果分析与总结结果分析部分功能演示:总结与建议总结:通过本次实验我学会了如何建立文件管理系统,学会了一些常用的目录、问津功能的实现,还学会了如何用文件读写指针对文件进行操作。
实验5 文件系统
![实验5 文件系统](https://img.taocdn.com/s3/m/68ee3efa910ef12d2af9e774.png)
实验5 文件系统:Linux文件管理1.实验目的(1)掌握Linux提供的文件系统调用的使用方法;(2)熟悉文件和目录操作的系统调用用户接口;(3)了解操作系统文件系统的工作原理和工作方式。
2.实验内容(1)利用Linux有关系统调用函数编写一个文件工具filetools,要求具有下列功能:***********0. 退出1. 创建新文件2. 写文件3. 读文件4. 复制文件5. 修改文件权限6. 查看文件权限7. 创建子目录8. 删除子目录9. 改变当前目录到指定目录10. 链接操作***********3. 实验指导(1).有关系统调用FILE *fopen(const char *filename, int flags);//打开或创建文件flags参数取值:O_RDONL Y--只读方式O_WRONL Y—只写方式O_RDWR—读写方式还可以用或运算对下列标志进行组合O_CREAT---如果文件不存在则创建,存在则不再创建O_TRUNC---如果文件已存在,则清除文件原有内容O_EXECL---如果文件已存在,又设置了O_CREAT,则强制open失败O_APPEND---每次写入时从文件尾部开始。
例:创建一个可读可写的文件file1,可用fd=open(“file1”,O_CREAT|O_RDWR);int fclose(int fd); //关闭文件size_t fwrite(const void*buffer,size_t size,size_t count,FILE*stream); //写文件size_t fread( void*buffer, size_t size, size_t count, FILE*stream ); //读文件int fseek( FILE*stream, long offset, int origin ); //文件读写指针定位int chmod(char *pathname, mode_t mode); //更改文件权限int mkdir(const char *path,mode_t mode); //mode是子目录的权限int rmdir(const char *path);int chdir(const char *path);int link(const char *oldpath,const char *newpath); //以newpath为名建立一个硬链接到oldpath所指定的文件,成功返回0,失败为-1。
Lniux文件系统实验报告
![Lniux文件系统实验报告](https://img.taocdn.com/s3/m/0f5c735515791711cc7931b765ce0508763275c0.png)
实验五文件系统
一、实验目的
1.掌握Linux系统下fdisk命令的用法。
2.掌握Linux系统下文件系统的创建、挂载与卸载。
3.掌握Linux系统下利用RAID技术实现磁盘冗余阵列的方法。
二、实验内容
1.磁盘分区管理
2.动态磁盘管理
三、实验指导
1.服务器现需要新建一块20GB的硬盘,需要对新增的硬盘进行分区管理、分区方案为/user目录所在分区10GB,/backup目录所在分区5GB,/home目录所在分区5GB。
步骤一,添加新硬盘
点击“编辑虚拟机设置”按钮,如下图
选择添加硬盘,如下图
下一步选择“SCSI(S)推荐”,如下图
下一步创建“新虚拟磁盘”,设置磁盘空间大小为“20GB”,如下图所示
单击完成,即完成了新硬盘的添加,如下图所示
通过fdisk -l命令查看新硬盘是否添加成功
步骤二,利用fdisk命令对/dev/sdb/进行分区
步骤三,格式化新建分区,在各分区上建立ext3类型的文件的系统,建立时要求检查磁盘坏块并显示详细信息。
步骤四,将/dev/sdb1挂载到/user目录,/dev/sdb2挂载到
/backup目录,/dev/sdb3挂载到/home目录
2、某公司的Linux服务器新增两块硬盘,硬盘大小为40GB。
为了实现数据保护功能,现需利用2块硬盘创建RAID1卷。
要求创建的RAID设备名为/dev/md110,并利用mkfs命令创建ext3文件系统。
最后将文件系统挂载到系统上。
四、实验总结
通过本次实验,我学习到fdisk 的一些命令和在Linux 系统下利用RAID 技术实现磁盘冗余阵列的方法。
文件系统模拟实验(C-实验教材)
![文件系统模拟实验(C-实验教材)](https://img.taocdn.com/s3/m/3bd5af03227916888486d722.png)
文件系统实验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.文件命名在不同的操作系统中对文件名的规定有所不同,文件名的格式和长度因系统而异。
一般来说,文件名由文件名和扩展名两部分组成,前者用于标识文件,后者用于区分文件类型,中间用“.”分割开来,它们都是字母或数字所组成的字母数字串。
实验五 磁盘管理
![实验五 磁盘管理](https://img.taocdn.com/s3/m/7ab90e5ff01dc281e53af06a.png)
实验五磁盘管理一、实验目的掌握文件系统的权限设置,保护文件系统的安全性。
二、实验原理1.磁盘配额是指限定用户对磁盘空间的使用。
(例:电子邮件用户,普通用户等);配额是基于卷完全分开独立的;同一用户若在同一磁盘的不同卷上都获得了配额,则他对该磁盘的最大使用空间为这些配额之和。
2.基本磁盘是包含主磁盘分区、扩展磁盘分区或逻辑驱动器的物理磁盘。
3 .动态磁盘是包含动态卷的磁盘。
三、实验设备Windows 2000 系统和计算机四、实验内容基本磁盘管理、动态磁盘管理、配额管理五、实验步骤(一) 配额管理1.可以为每个人设置通用的配额(1)打开“我的电脑”(2)右击要启用磁盘配额的磁盘卷,然后单击“属性”按钮;(3)在“属性”对话框中,单击“配额”选项卡;(4)在“配额”属性页上,单击“启用配额管理”复选框,然后单击“确定”按钮。
2.为那些需要多一些或少一些的人设置特定的配额(1)在上述的“配额”选项卡上单击“配额项目”按钮(2)在“配额项目”窗口中单击“配额”菜单上的“新配项目”;(3)选择用户(4)在“添加新配额项目”对话框中,指不定期一个选项,单击“确定”(二)基本磁盘管理1 .创建主磁盘分区(1)打开“磁盘管理”。
(2)在基本磁盘上,用鼠标右键单击一个未指派的空间,然后在弹出菜单中单击“创建磁盘分区”。
(3)在创建磁盘分区向导的欢迎页上,单击“下一步”按钮。
(4)在“选择分区类型”页上,单击“主磁盘分区”,然后单击“下一步”按钮。
(5)在“指定分区大小”页上,键入该主磁盘分区的容量,然后单击“下一步”按钮。
(6)在“指派驱动器号和路径”页上,选中“指派驱动器号”,并选择一个字母来代表该主磁盘分区,然后单击“下一步”按钮。
(7)在“格式化分区”页上,单击“不要格式化这个磁盘分区”,然后单击“下一步”按钮。
(8)在“完成创建磁盘分区向导”页上,单击“完成”按钮。
回到“磁盘管理”窗口,可以看到新创建的分区 F: ,同时在窗口中的驱动器列表中也有了这个驱器。
操作系统实验-文件系统设计
![操作系统实验-文件系统设计](https://img.taocdn.com/s3/m/374d55f9f705cc17552709a7.png)
文件系统设计1.目的和要求本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。
实验要求:①在系统中用一个文件来模拟一个磁盘;②此系统至少有:Create、delete、open、close、read、write等和部分文件属性的功能。
③实现这个文件系统。
④能实际演示这个文件系统。
基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。
2.实验内容1)设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。
2)程序采用二级文件目录(即设置主目录MFD)和用户文件目录(UFD)。
另外,为打开文件设置了运行文件目录(AFD)。
3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。
4)因系统小,文件目录的检索使用了简单的线性搜索。
5)文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位为0,则表示不允许读写、执行。
6)程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD、UFD),打开文件目录(AFD)即运行文件目录。
3.实验环境VC 6.04.实验提示1) format 格式化只写打开模拟文件,初始化超级快,初始化dinode 位图 block 位图,初始化主目录,初始化etc 目录,初始化管理员admin 目录,初始化用户xiao 目录,初始化 用户passwd 文件,写入模拟硬盘文件。
2 )install 安装读写打开模拟文件,读取dinode 位图 block 位图,读取主目录,读取etc 目录,读取管理员admin 目录,读取用户xiao 目录,读取 用户passwd 文件。
3 )login 登陆用户输入用户名和密码,在passwd 文件中查找是否有此用户,核对密码。
正确则登陆成功,当前目录设定到当前用户文件夹下。
Login登录结束是,登录成功输入用户名查找是否有改用户名输入密码是否密码是否正确否4 )ialloc 申请inode 空间先检测inode 位图是否加锁,是则退出。
操作系统实验5文件系统:Linux文件管理
![操作系统实验5文件系统:Linux文件管理](https://img.taocdn.com/s3/m/1cd69aa7dc88d0d233d4b14e852458fb770b3820.png)
(1)掌握Linux 提供的文件系统调用的使用方法;
(2)熟悉文件和目录操作的系统调用用户接口;
(3)了解操作系统文件系统的工作原理和工作方式。
(1) 利用Linux 有关系统调用函数编写一个文件工具filetools,要求具有下列功能:***********
0. 退出
1. 创建新文件
2. 写文件
3. 读文件
4. 复制文件
5. 修改文件权限
6. 查看文件权限
7. 创建子目录
8. 删除子目录
9. 改变当前目录到指定目录
10. 链接操作
通过这次实验掌握Linux 提供的文件系统调用的使用方法;熟悉文件和目录操作的调用用户接口,了解操作系统文件系统的工作原理和工作方式。
W5 实验五 文件系统制作实验
![W5 实验五 文件系统制作实验](https://img.taocdn.com/s3/m/c7a3d6868762caaedd33d429.png)
实验五 嵌入式文件系统的构建【实验目的】1、了解嵌入式操作系统中文件系统的类型和作用 2、了解 JFFS2 文件系统的优点及其在嵌入式系统中的作用 3、掌握利用 BusyBox 软件制作嵌入式文件系统的方法 4、掌握嵌入式 Linux 文件系统的的挂载过程【实验原理】1、Linux 文件系统的类型 (1) 、EXT 文件系统 Ext2fs 是 Linux 的标准文件系统,它已经取代了扩展文件系统(或 Extfs) 。
扩展文件系 统 Extfs 支持的文件大小最大为 2 GB, 支持的最大文件名称大小为 255 个字符, 而且它不支 持索引节点(包括数据修改时间标记) 。
Ext2fs 取代 Extfs 具有一些优点: Ext2fs 支持达 4 TB 的内存。
Ext2fs 文件名称最长可以到 1012 个字符。
在创建文件系统时,管理员可以根据需要选择存储逻辑块的大小(通常大小可选择 1024、2048 和 4096 字节) 。
Ext2fs 可以实现快速符号链接(相当 windows 文件系统的快捷方式) ,不需为符号链接 分配数据块,并且可将目标名称直接存储在索引节点(inode)表中。
这使文件系统的 性能有所提高,特别在访问速度上。
由于 Ext2fs 文件系统的稳定性、可靠性和健壮性,所以几乎在所有基于 Linux 的系统 (包括台式机、服务器和工作站,并且甚至一些嵌入式设备)上都使用 Ext2fs 文件系统。
(2) 、NFS 文件系统 NFS 是一个 RPC service ,它是由 SUN 公司开发,并于 1984 年推出。
NFS 文件系统能 够使文件实现共享,它的设计是为了在不同的系统之间使用,所以 NFS 文件系统的通信协 议设计与作业系统无关。
当使用者想使用远端文件时只要用“mount”命令就可以把远端文 件系统挂载在自己的文件系统上,使远端的文件在使用上和本地机器的文件没有区别。
实验4:文件系统
![实验4:文件系统](https://img.taocdn.com/s3/m/c4258d7ff242336c1eb95e1f.png)
操作系统实验报告实验题目:文件系统专业计算机科学与技术学生姓名班级学号指导教师肖莹指导单位计算机学院日期一、实验目的1. 学习Linux系统下对文件进行操作的各种命令和图形化界面的使用方法。
二、实验指导1.文件系统常用命令操作1)ls 命令用来查看用户有执行权限的任意目录中的文件列表,该命令有许多的选项。
例如:$ ls -liah *22684 -rw-r--r-- 1 bluher users 952 Dec 28 18:43 .profile19942 -rw-r--r-- 1 scalish users 30 Jan 3 20:00 test2.out925 -rwxr-xr-x 1 scalish users 378 Sep 2 2002 test.sh上面的列表显示8 列:第1 列指示文件的inode,因为我们使用了-i 选项。
剩下的列通过-l 选项来进行正常显示。
第2 列显示文件类型和文件访问权限。
第3 列显示链接数,包括目录。
第4 和第 5 列显示文件的所有者和组所有者。
这里,所有者'bluher' 属于组'users'。
第 6 列显示文件大小(单位为所显示的单位,而不是默认的字节数,因为我们使用了-h 选项。
第7 列显示日期(它看起来像是三列),包括月、日和年,以及当天的时间。
第8 列显示文件名。
在选项列表中使用-a 将使列表中包含隐藏文件(如.profile)的列表。
(隐藏文件以.开始命名)(要求:1、任意选择一个文件夹,显示其中的所有文件的详细信息;2、自己在该文件夹内创建一个隐藏文件,调用扩展的ls命令,不显示该隐藏文件,但需要显示其他非隐藏文件的详细信息。
随后,调用带参数的ls命令,显示该隐藏文件)2)带参数的rm命令$ rm -ir Testrm:descend into directory `Test'? y可以用mkdir 来创建目录,用rmdir 来删除目录。
操作系统实验---文件系统
![操作系统实验---文件系统](https://img.taocdn.com/s3/m/aaebffac9b89680203d825b8.png)
实验报告实验题目:文件系统姓名:学号:课程名称:操作系统所在学院:信息科学与工程学院专业班级:计算机任课教师:实验项目名称文件系统一、实验目的与要求:1、通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及其内部实现。
2、熟悉文件管理系统的设计方法,加深对所学各种文件操作的了解及其操作方法的特点。
3、通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。
4、通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。
二、实验设备及软件:一台PC(Linux系统)三、实验方法(原理、流程图)试验方法(1)首先应当确定文件系统的数据结构:主目录、子目录以及活动文件等。
主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。
(2)用户创建文件,可以编号存储于磁盘上。
如file0,file1,file2…并以编号作为物理地址,在目录中登记。
文件系统功能流程图图1.文件系统总体命令分析图 2.登录流程图图 3. ialloc流程图图4.balloc流程图图5.密码修改流程图图6.初始化磁盘图 7.显示所有子目录 dir/ls 操作流程图图8.创建文件 creatfile 、创建目录 mkdir 流程图图9.改变当前路径 cd 操作流程图实验原理1.文件操作◆mkdir 创建目录文件模块,输入 mkdir 命令,回车,输入文件名,回车,即会在当前目录文件下创建一个名为刚刚输入的文件名的目录文件。
在该创建过程中首先要判断该目录中有没有同名的文件,如果有的话就创建失败,还要判断在该目录下有没有创建文件的权限,有权限才可以创建。
具体流程图查看第二节,系统流程图设计部分。
◆del 删除文件模块,输入 del命令,回车,输入文件名,回车,即会在当前目录文件下删除一个名为刚刚输入的文件名的数据文件。
在该删除过程中要判断该目录中是否存在该文件,如果不存在就没有必要执行该操作了,还要判断在该目录下有没有删除文件的权限,有权限才可以删除。
文件系统实验报告
![文件系统实验报告](https://img.taocdn.com/s3/m/42913186915f804d2a16c107.png)
char name[12];
curuser = getspace(MFD);
while(1)
{
cout<<"\n ;<endl;
cout<<"用户名:";
cin>>name; //输入用户注册名
}
}
void DisplayUFD()//打印用户信息,包括用户的各个文件
//名称、长度和操作权限的设置信息
{
if(curuser->filepoint == false)//当前用户目录下没有任何文件存在
cout<<"\n用户 "<<curuser->username<<" 文件夹是空的"<<endl;
二、实验题目:
采用二级目录结构实现磁盘文件操作。
要求:
1.普通文件的目录项包括文件名,文件类型,文件长度,指向文件内容的指针内容。
2.目录文件的目录项包括目录名,指向下一级目录块的指针内容。假定每个目录文件最多只能占用一个块;
3.程序功能方面的要求: 需要实现一个命令行操作界面,包含如下命令:
4.程序实现方面的要求:
{
cout<<"\n保存错误。";//fclose(infile);
return;
}
else
{
if((outfile=fopen(out,"wb+"))==NULL)//申请一个缓冲区管理模块
文件系统实验素材
![文件系统实验素材](https://img.taocdn.com/s3/m/4e5a8f205901020207409c99.png)
文件系统实验素材首先回答最常见的问题,“什么是文件系统”。
文件系统是对一个存储设备上的数据和元数据进行组织的机制。
一、实验步骤:1、我们在当前文件系统的一个文件中创建一个文件系统。
实现的方法是,首先用dd 命令创建一个指定大小的文件(使用/dev/zero 作为源进行文件复制)——换句话说,一个用零进行初始化的文件。
$ dd if=/dev/zero of=file.img bs=1k count=1000010000+0 records in10000+0 records out$2、现在有了一个10MB 的file.img 文件。
使用losetup 命令将一个循环设备与这个文件关联起来,让它看起来像一个块设备,而不是文件系统中的常规文件:$ losetup /dev/loop0 file.img$3、这个文件现在作为一个块设备出现(由/dev/loop0 表示)。
然后用mke2fs 在这个设备上创建一个文件系统。
这个命令创建一个指定大小的新的ext2 文件系统。
$ mkfs.ext2 -c /dev/loop0 10000mke2fs 1.35 (28-Feb-2004)max_blocks 1024000, rsv_groups = 1250, rsv_gdb = 39Filesystem label=OS type: LinuxBlock size=1024 (log=0)Fragment size=1024 (log=0)2512 inodes, 10000 blocks500 blocks (5.00%) reserved for the super user...$使用mount 命令将循环设备(/dev/loop0)所表示的file.img 文件挂装到挂装点/mnt/point1。
注意,文件系统类型指定为ext2。
挂装之后,就可以将这个挂装点当作一个新的文件系统,比如使用ls 命令。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五(1) Linux文件系统实验
实验目的
学习Linux中文件系统的使用,理解链接、权限的概念和使用;掌握常用的文件系统的系统调用,加深对文件系统界面的理解。
实验内容
1.学习文件链接的概念和使用(步骤一、步骤二)
2.学习文件权限的概念和管理机制,并学会使用(步骤三)
3.学习和文件相关的系统调用和库函数,进行若干编程练习(步骤四,至少完成两例)
实验步骤
一、文件链接与复制(hard link)
1.使用vi a创建一个文件a
2.使用ln a b命令创建一个
使用cp a c创建一个复制版本
观察3个文件的大小、时间、属主(owner)等属性
3.修改文件a
4.观察文件b的内容,观察文件c的内容,观察3个文件的大小、时间、属主(owner)等属性
5.使用ls –li命令,观察文件a, b, c的inode编号
6.使用rm a删除文件a
7.观察文件b, c是否仍然存在,内容如何
8.使用rm b删除文件b,再观察文件b, c是否存在
二、符号链接(软链接)symbolic link / soft link
1.创建文件a
2.使用ln –s a b创建符号一个链接
3.执行上述步骤3-8,观察有什么异同
三、不同用户之间的硬链接和符号链接
1.在用户stu下创建文件a
注意使用chmod命令,将主目录(~stu)权限改为所有其它用户可访问(r-x)
(如果不知道chmod命令的用法,可以使用man chmod来查阅)
chmod o+rx ~
2.在另一个登录窗口内(使用Alt+F2切换到另一个登录窗口,使用Alt+F1切换回原登录窗口),以用户stu2登录,分别使用ln ~stu/a ha和
ln –s ~stu/a sa命令创建硬链接ha和符号链接sa
观察3个文件的大小、时间、属主(owner)等属性
3.在用户stu下,修改文件a;在用户stu2下分别观察文件ha和sa的内容
4.在用户stu下,修改文件a的访问权限;在用户stu2下,用ls –l命令观察ha和sa的访问权限、用户属主等信息,并使用cat命令、cp命令、vi命令验证访问控制权限的作用
5.两个用户下,分别使用ls –li命令检查文件a, ha, sa的inode编号,想一下为什么6.在用户stu2下删除ha;观察sa存在与否?用户stu下文件a存在与否?
7.在用户stu下可以删除文件a吗?删除后,用户stu2下的文件sa还存在吗?内容是什么?
四、Linux中与文件系统相关的系统调用
1.通过使用man命令,查阅以下的系统调用的使用手册。
1)文件操作
open, close, read, write, seek
creat, truncate, mknod, dup, dup2
link, unlink, rename, symlink
chmod, chown, umask
fcntl, flock, fstat, lstat, stat, utime
fsync, fdatasync
2)目录操作
mkdir, chdir, rmdir
readdir, getdents
3)库函数
fopen, fclose, fread, fwrite, fscanf, fprintf, fseek ,ftell, feof等
2.文件系统的系统调用的编程练习
利用上面的系统调用,试写出自己的命令程序,完成以下功能(要求:1)-7)至少完成5例,8)-10)至少完成2例):
1)如何创建一个文件?
2)如何删除一个文件? (rm 命令)
3)如何将一个文件拷贝到另一个文件? (cp 命令)
4)如何重命名一个文件? (mv file命令)
5)如何截断一个文件(或使其长度为零)?How to truncate a file (or make it be of length
zero)?
6)如何向一个文件中追加内容?
7)如何锁定一个文件? (read lock, write lock)
8)如何创建一个目录? (mkdir 命令)
9)如何删除一个目录? (rmdir 命令)
10)如何遍历一个目录(或称浏览该目录下所有文件?)?(ls –lR 命令)
实验五(2) Linux文件系统实验(选做)
实验内容:
1.仔细阅读以下代码;
2.画出系统功能框图
3.程序注释
4.截屏程序运行结果,分析说明结果。
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<syslog.h>
#include<string.h>
#include<stdlib.h>
#define MAX 128
int chmd();
int chmd ()
{
int c;
mode_t mode=S_IWUSR;
printf(" 0. 0700\n 1. 0400\n 2. 0200 \n 3. 0100\n "); //还可以增加其它权限
printf("Please input your choice(0-3):");
scanf("%d",&c);
switch(c)
{
case 0: chmod("file1",S_IRWXU);break;
case 1: chmod("file1",S_IRUSR);break;
case 2: chmod("file1",S_IWUSR);break;
case 3: chmod("file1",S_IXUSR);break;
default:printf("Y ou have a wrong choice!\n");
}
return(0);
}
main()
{
int fd;
int num;
int choice;
char buffer[MAX];
struct stat buf;
char* path="/bin/ls";
char* argv[4]={"ls","-l","file1",NULL};
while(1)
{
printf("********************************\n");
printf("0. 退出\n");
printf("1. 创建新文件\n");
printf("2. 写文件\n");
printf("3. 读文件\n");
printf("4. 修改文件权限\n");
printf("5. 查看当前文件的权限修改文件权限\n");
printf("********************************\n");
printf("Please input your choice(0-6):");
scanf("%d",&choice);
switch(choice)
{
case 0:close(fd); //关闭file1文件
exit(0);
case 1:
fd=open("file1",O_RDWR|O_TRUNC|O_CREA T,0750); /*创建file1*/ if(fd==-1)
printf("File Create Failed!\n");
else
printf("fd = %d\n",fd); /*显示file1*/
break;
case 2:
num=read(0,buffer,MAX); //从键盘里面读取最多128个字符
write(fd,buffer,num); //把读入的信息送到file1里面去
break;
case 3:
/* 把file1文件的内容在屏幕上输出*/
read(fd,buffer,MAX);
write(1,buffer,num);
break;
case 4:
chmd ();
printf("Change mode success!\n");
break;
case 5:
execv(path,argv); //执行ls –l file1
break;
default:
printf("Y ou have a wrong choice!\n");
}
}
}。