搜档网
当前位置:搜档网 › 实验四 文件系统实验

实验四 文件系统实验

实验四 文件系统实验
实验四 文件系统实验

实验四文件系统实验

一 . 目的要求

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个文件操作命令,并加以实现。(如移动读写指针,改变文件属

性,更换文件名,改变文件保护级别)。

#include

#include

#include

#define getpch(type) (type*)malloc(sizeof(type))

int userNum=0;

struct mdf

{

char userName[20];

struct UFD* p;

} mdf[20];

struct ufd

{

char fileName[20];

char File[50];

struct ufd * next;

}*fp,*tp,*p,*begin;

typedef struct ufd UFD ;

void show(struct UFD *f)

{

begin=f;

if(begin->next==NULL) printf("该用户名下尚无文件!\n");

else

{

printf("该用户名下所有文件:\n");

begin=begin->next;

while(begin!=NULL)

{

printf("%s: %s\n",begin->fileName,begin->File);

begin=begin->next;

}

}

}

void Operation(struct UFD *f)

{

int i;

char filename[20],file[50];

begin=f;

label:

printf("请选择操作:\n 1:create; 2:delete; 3:read; 4:write; 5:open;\n 6:lose; 7:Chang File's Name; 8:Show All The File\n"); scanf("%d",&i);

if(i==1)

{

tp=getpch(UFD);

printf("请输入文件名:");

scanf("%s",filename);

printf("\n请输入文件内容:");

scanf("%s",file);

strcpy(tp->fileName,filename);

strcpy(tp->File,file);

tp->next=NULL;

p=begin;

p->next=tp;

printf("\n文件创建完毕!\n");

goto label;

}

else if(i==2)

{

printf("请输入文件名:");

scanf("%s",filename);

p=begin->next;

while(strcmp(p->fileName,filename)!=0&&p!=NULL) p=p->next;

if(p==NULL) printf("文件不存在!\n");

else

{

tp=begin;

while(tp->next!=p) tp=tp->next;

tp->next=p->next;

free(p);

printf("文件已删除!\n");

}

goto label;

}

else if(i==3)

{

printf("请输入文件名:");

scanf("%s",filename);

p=begin->next;

while(strcmp(p->fileName,filename)!=0&&p!=NULL) p=p->next;

if(p==NULL) printf("文件不存在!\n");

else

{

printf("%s: %s\n",p->fileName,p->File);

}

goto label;

}

else if(i==4)

{

printf("请输入文件名:");

scanf("%s",filename);

printf("\n请输入文件内容:");

scanf("%s",file);

p=begin->next;

while(p!=NULL)

{

if(!(strcmp(p->fileName,filename)))

{

strcpy(p->File,file);

printf("\n替换了以%s为名的文件!\n",filename); goto label;

}

p=p->next;

}

tp=getpch(UFD);

strcpy(tp->fileName,filename);

strcpy(tp->File,file);

tp->next=NULL;

p=begin;

p->next=tp;

printf("\n创建了以%s为名的文件!\n",filename);

goto label;

}

else if(i==5)

{

goto label;

}

else if(i==6)

{

printf("功能被关闭,无法操作了\n");

Select();

}

else if(i==7)

{

printf("请输入要改名的文件名:");

scanf("%s",filename);

while(p!=NULL)

{

if(!(strcmp(p->fileName,filename)))

{

printf("\n请输入新的文件名:");

scanf("%s",filename);

strcpy(p->fileName,filename);

printf("\n文件名已更改!\n");

goto label;

}

p=p->next;

}

printf("文件不存在!\n");

goto label;

}

else if(i==8)

{

show(f);

goto label;

}

else

{

goto label;

}

}

void Select()

{

char username[20];

int i;

printf("请输入用户名:\n");

scanf("%s",username);

for(i=0; i

{

if(!strcmp(mdf[i].userName,username))

{

fp= mdf[i].p;

if(fp!=NULL)

{

printf("该用户已创建文件:\n");

while(fp!=NULL)

{

fp=fp->next;

printf("%s\n",fp->fileName);

}

}

else

{

printf("该用户尚未创建任何文件!\n"); }

fp= mdf[i].p;

Operation(fp);

}

}

if(i>=userNum)

{

printf("该用户不存在,创建新用户?\n 1:是 2:否\n");

scanf("%d",&i);

if(i==1)

{

strcpy(mdf[userNum++].userName,username);

printf("已创建用户!\n");

i=userNum-1;

fp= mdf[i].p;

Operation(fp);

}

else

{

printf("查询其它?\n 1:是 2:否\n");

scanf("%d",&i);

if(i==1)

{

Select();

}

else

{

printf("谢谢使用!\n");

return;

}

}

}

}

int main()

{

int i;

for(i=0; i<20; i++)

{

tp=getpch(UFD);

tp->next=NULL;

mdf[i].p=tp;

}

Select();

return 0;

}

2、编一个通过屏幕选择命令的文件管理系统,每屏要为用户提供足够的选择信

息,不需要打入冗长的命令。

#include

#include

#include

#define getpch(type) (type*)malloc(sizeof(type))

int userNum=0;

struct mdf

{

char userName[20];

struct UFD* p;

} mdf[20];

struct ufd

{

char fileName[20];

char File[50];

struct ufd * next;

}*fp,*tp,*p,*begin;

typedef struct ufd UFD;

void show(struct UFD *f)

{

begin=f;

if(begin->next==NULL) printf("该用户名下尚无文件!\n");

else

{

printf("该用户名下所有文件:\n");

begin=begin->next;

while(begin!=NULL)

{

printf("%s: %s\n",begin->fileName,begin->File);

begin=begin->next;

}

}

}

void Operation(struct UFD *f)

{

int i;

char filename[20],file[50];

begin=f;

label:

printf("请选择操作:\n 1:create; 2:delete; 3:read; 4:write; 5:open;\n 6:lose; 7:Chang File's Name; 8:Show All The File\n"); scanf("%d",&i);

if(i==1)

{

tp=getpch(UFD);

printf("请输入文件名:");

scanf("%s",filename);

printf("\n请输入文件内容:");

scanf("%s",file);

strcpy(tp->fileName,filename);

strcpy(tp->File,file);

tp->next=NULL;

p=begin;

p->next=tp;

printf("\n文件创建完毕!\n");

goto label;

}

else if(i==2)

{

printf("请输入文件名:");

scanf("%s",filename);

p=begin->next;

while(strcmp(p->fileName,filename)!=0&&p!=NULL) p=p->next;

if(p==NULL) printf("文件不存在!\n");

else

{

tp=begin;

while(tp->next!=p) tp=tp->next;

tp->next=p->next;

free(p);

printf("文件已删除!\n");

}

goto label;

}

else if(i==3)

{

printf("请输入文件名:");

scanf("%s",filename);

p=begin->next;

while(strcmp(p->fileName,filename)!=0&&p!=NULL) p=p->next;

if(p==NULL) printf("文件不存在!\n");

else

{

printf("%s: %s\n",p->fileName,p->File);

}

goto label;

}

else if(i==4)

{

printf("请输入文件名:");

scanf("%s",filename);

printf("\n请输入文件内容:");

scanf("%s",file);

p=begin->next;

while(p!=NULL)

{

if(!(strcmp(p->fileName,filename)))

{

strcpy(p->File,file);

printf("\n替换了以%s为名的文件!\n",filename); goto label;

}

p=p->next;

}

tp=getpch(UFD);

strcpy(tp->fileName,filename);

strcpy(tp->File,file);

tp->next=NULL;

p=begin;

p->next=tp;

printf("\n创建了以%s为名的文件!\n",filename);

goto label;

}

else if(i==5)

{

goto label;

}

else if(i==6)

{

printf("功能被关闭,无法操作了\n");

Select();

}

else if(i==7)

{

printf("请输入要改名的文件名:");

scanf("%s",filename);

while(p!=NULL)

{

if(!(strcmp(p->fileName,filename)))

{

printf("\n请输入新的文件名:");

scanf("%s",filename);

strcpy(p->fileName,filename);

printf("\n文件名已更改!\n");

goto label;

}

p=p->next;

}

printf("文件不存在!\n");

goto label;

}

else if(i==8)

{

show(f);

goto label;

}

else

{

goto label;

}

}

void Select()

{

char username[20];

int i;

printf("请输入用户名:\n");

scanf("%s",username);

for(i=0; i

{

if(!strcmp(mdf[i].userName,username))

{

fp= mdf[i].p;

if(fp!=NULL)

{

printf("该用户已创建文件:\n");

while(fp!=NULL)

{

fp=fp->next;

printf("%s\n",fp->fileName);

}

}

else

{

printf("该用户尚未创建任何文件!\n"); }

fp= mdf[i].p;

Operation(fp);

}

}

if(i>=userNum)

{

printf("该用户不存在,创建新用户?\n 1:是 2:否\n");

scanf("%d",&i);

if(i==1)

{

strcpy(mdf[userNum++].userName,username);

printf("已创建用户!\n");

i=userNum-1;

fp= mdf[i].p;

Operation(fp);

}

else

{

printf("查询其它?\n 1:是 2:否\n");

scanf("%d",&i);

if(i==1)

{

Select();

}

else

{

printf("谢谢使用!\n");

return;

}

}

}

}

int main()

{

int i;

for(i=0; i<20; i++)

{

tp=getpch(UFD);

tp->next=NULL;

mdf[i].p=tp;

}

Select();

return 0;

}

3、设计一个树型目录结构的文件系统,其根目录为 root,各分支可以是目录,

也可以是文件,最后的叶子都是文件。

#include

#include //

#include

#include

#include

#include

#define getpch(type) (type*)malloc(sizeof(type))

struct mulu /*定义目录结构体*/

{

char name[15]; /*存放目录名*/

char password[6]; /*如果用户目录时还保存用户密码*/

char usr[15]; /*目录所属用户*/

int time[3]; /*创建时间*/

int son_nu; /*子目录数*/

int wj_nu; /*目录下文件数*/

struct mulu *parent; /*指向父目录*/

struct mulu *son[10]; /*最多可以创建十个子目录*/

struct wenjian *wj[10]; /*最多可以存放十个文件*/

}*root,*p; /*p指针用来指向当前目录*/

struct wenjian /*定义文件结构体*/

{

char name[15]; /*存放文件名*/

char usr[15]; /*文件所属用户*/

int time[3]; /*文件最后修改时间*/

struct mulu *parent; /*指向文件所在的目录*/

}*q;

typedef struct mulu MULU;

typedef struct wenjian WJ;

char lujing[20][15]; /*用来记录个路径*/

int lj=0; /*记录根目录到当前目录级数,方便打印目录*/ char user[15]; /*记录当前使用系统的用户,便于判断其访问文件权限*/

char cmd[28][20]= /*本系统的指令集*/

{ {"CLS"},{"cls"},{"PWD"},{"pwd"},{"LS"},{"ls"}, {"MKDIR"},{"mkdir"},{"RMDIR"},{"rmdir"},{"CD"},

{"cd"},{"VI"},{"vi"},{"RM"},{"rm"},{"COPY"},{"copy"}, {"MV"},{"mv"},{"HELP"},{"help"},{"LOGOUT"},{"logout"}, {"MSD"},{"msd"},{"MVDIR"},{"mvdir"} }

void Gotoxy(int x,int y)

{

int xx=0x0b;

HANDLE hOutput;

COORD loc;

loc.X= x;

loc.Y=y;

hOutput= GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorPosition(hOutput, loc);

return;

}

void ROOT() /*初始化根目录root*/

{

int i;

root=getpch(MULU);

p=root;

strcpy(root->name,"root"); /*目录名为root*/

strcpy(root->usr,root->name); /*目录属主root*/

root->son_nu=0; /*用户个数为0*/

root->wj_nu=0; /*文件个数为0*/

root->parent=0; /*根目录是最上一级了*/

for(i=0; i<10; i++)

{

root->son[i]=0;

root->wj[i]=0;

}

strcpy(lujing[0],"root"); /*保存路径信息,供打印路径使用*/

lj+=1;

}

int LOGIN() /*登陆函数,包括用户名和用户密码检验,在登陆过程中成功则返回1,失败返回0*/

{

char a[15]; /*用于存放用户名*/

char b[6]; /*用于存放密码*/

char d;

int i;

int j=100; /*设计标记j*/

long int k;

printf("请输入用户名:");

scanf("%s",a);

for(i=0; i<10; i++) /*查找要登陆的用户是否存在,如存在则赋值给j*/

{

if(strcmp(a,root->son[i]->name)==0)

{

j=i;

}

}

if(j==100)

{

printf("该用户不存在!\n\n"); /*若j没改变即用户不存在*/

d=getch();

return 0;

}

printf("请输入密码:"); /*检验密码*/

scanf("%s",b);

if(strcmp(b,root->son[j]->password)==0)

{

p=root->son[j];

lj=2;

strcpy(lujing[lj],a ); /*登陆滚动条个性化设置*/ system("clr");

Gotoxy(1,25);

printf("=============================================================

==================");

Gotoxy(1,25);

for(i=0; i<79; i++)

{

for(k=0; k<2000000; k++) {}

printf(">");

}

system("cls");

printf("\n");

strcpy(user,a); /*记录当前登陆的用户*/

return 1;

}

printf("密码有误!\n\n");

d=getch();

return 0;

}

int NEWUSER() /*新用户创建函数,创建成功则返回1,失败返回0.*/

{

struct tm* t;

time_t curtime;

curtime=time(NULL);

t=gmtime(&curtime);

char a[7] char d;

int i;

long int j;

if(root->son_nu>=10)

{

printf("用户已达到最大数目\n\n"); /*判断系统是否达到最大用

户数目*/ return 0;

}

else

{

p=getpch(MULU);

printf("请输入用户名(最长15位):");

scanf("%s",p->name);

for(i=0; i<10; i++)

{

if(root->son[i]!=0)

{

if(strcmp(p->name,root->son[i]->name)==0)

{

printf("该用户已存在!\n");

d=getch();

return 0;

}

}

}

printf("请输入位密码( 最长6位):");

scanf("%s",p->password);

/*判断两次用户密码是否一致*/ printf("再次输入密码:");

scanf("%s",a);

if(strcmp(a,p->password)!=0)

{

printf("两次密码不同,创建新用户失败!");

d=getch();

return 0;

};

strcpy(p->usr,p->name);

p->son_nu=0;

p->wj_nu=0;

p->parent=root;

for(i=0; i<10; i++)

{

p->son[i]=0;

p->wj[i]=0;

} /*保存最后修改时间*/ // gettime(&t); p->time[0]=t->tm_hour;

p->time[1]=t->tm_min;

p->time[2]=t->tm_sec;

strcpy(lujing[lj],p->name);

lj+=1; /*登陆滚动条个性化设置*/ system("clr");

Gotoxy(1,25);

printf("=============================================================

==================");

Gotoxy(1,25);

for(i=0; i<79; i++)

{

for(j=0; j<3000000; j++) {} printf(">");

}

system("cls");

printf("\n");

strcpy(user,p->name); /*记录当前登陆的用户*/

for(i=0; i<10; i++)

{

if(root->son[i]==0)

{

root->son[i]=p;

root->son_nu+=1;

return 1;

system("cls");

printf("\n");

strcpy(user,p->name); /*记录当前登陆的用户*/ for(i=0; i<10; i++)

{

if(root->son[i]==0)

{

root->son[i]=p;

root->son_nu+=1;

return 1;

}

}

}

}

/********************************************************************

**********/ void PWD() /*显示当前目录路径

函数*/

{

int i;

for(i=0; i

{

printf("%s/",lujing[i]);

}

printf("\n");

}

/******************************************************************** **********/ void LS() /*目录列表函数*/

{

int i,j;

printf("名称用户类型修改日期

\n");

printf("----------------------------------------------------------\n" );

for(i=0; i<10; i++) /*列目录属性*/

{

if(p->son[i]!=0)

{

printf("%-15s%-15s目录

",p->son[i]->name,p->son[i]->usr);

printf("%d:%d:%d\n",p->son[i]->time[0],p->son[i]->time[1],p->son[i]-> time[2]);

}

}

for(i=0; i<10; i++) /*列文件属性*/

{

if(p->wj[i]!=0)

{

printf("%-15s%-15s文件

",p->wj[i]->name,p->wj[i]->usr);

printf("%d:%d:%d\n",(p->wj[i])->time[0],(p->wj[i])->time[1],(p->wj[i] )->time[2]);

}

}

printf("\n");

}

MKDIR() /*新键目录函数*/

{

struct tm* t;

time_t curtime;

curtime=time(NULL);

t=gmtime(&curtime);

MULU *pp;

int i;

pp=getpch(MULU);

scanf("%s",pp->name);

if(strcmp(p->name,"root")==0)

{

printf("不能在该根目录下创建\n\n"); /*如果当前目录为根目录则不准建立*/ return;

}

if(p->son_nu>=10)

{

printf("创建目录已达到最大数目\n\n");

return

}

for(i=0; i<10; i++)

{

if(p->son[i]!=0)

{

if(strcmp(p->son[i]->name,pp->name)==0)

{

printf("该目录已存在:\n\n");

return;

}; /*判断该目录是否存在*/

}

}

strcpy(pp->usr,p->usr);

pp->son_nu=0;

pp->wj_nu=0;

pp->parent=p;

for(i=0; i<10; i++)

{

pp->son[i]=0;

pp->wj[i]=0;

}

/*保存最后修改时间*/ //gettime(&t);

pp->time[0]=t->tm_hour; pp->time[1]=t->tm_min;

pp->time[2]=t->tm_sec; printf("目录于%d:%d:%d创建成

功!\n\n",pp->time[0],pp->time[1],pp->time[2]); for(i=0; i<10; i++)

{

if(p->son[i]==0)

{

p->son[i]=pp;

p->son_nu+=1;

return;

}

}

/******************************************************************** **********/ RMDIR() /*删除目录函数*/

{

char a[15];

MULU *pp;

int i,j=100;

scanf("%s",a);

for(i=0; i<10; i++)

{

if(p->son[i]!=0)

{

if(strcmp(p->son[i]->name,a)==0)

{

pp=p->son[i];

j=i;

}

}

}

if(pp->son_nu!=0||pp->wj_nu!=0)

{

printf("操作失败,目录不存在或非空!\n\n");

return; /*如果目录非空或不存在操作失败*/

}

if(j!=100)p->son[j]=0;

p->son_nu-=1;

free(pp);

printf("操作成功!\n\n");

}

/******************************************************************** **********/ CD() /*改变当前工作目录*/

{

char a[15];

int i;

scanf("%s",a);

if(strcmp(a,".")==0)

{

if(strcmp(p->name,"root")==0)return; /*最高可以切换到根目录,如果在根目录下做cd .操作将失效*/

p=p->parent;

strcpy(lujing[lj-1],0);

lj-=1;

return;

实验三 文件系统实验

实验三文件系统实验 一.目的要求 1. 用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。 2. 要求设计一个n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。 二.例题: ●设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行 用户可以打开5个文件。 ●程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。 另外,为打开文件设置了运行文件目录(AFD)。 ●为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读 写指针,并不进行实际的读写操作 ●算法与框图: 1.因系统小,文件目录的检索使用了简单的线性搜索。 2.文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位 为0,则表示不允许读写、执行。 3.程序中使用的主要设计结构如下: ●主文件目录和用户文件目录(MFD、UFD) ●打开文件目录(AFD)(即运行文件目录) MDF: (1)用户名 (2)文件目录指针 (3)用户名 (4)文件目录指针 UFD (1)文件名

(2)保护码 (3)文件长度 (4)文件名 AFD (1)打开文件名 (2)打开保护码 (3)读写指针 文件系统算法的流程图如下:

三.实验题: 1.增加2~3个文件操作命令,并加以实现。(如移动读写指针,改变文件属性, 更换文件名,改变文件保护级别)。 2.编一个通过屏幕选择命令的文件管理系统,每屏要为用户提供足够的选择信 息,不需要打入冗长的命令。 3.设计一个树型目录结构的文件系统,其根目录为root,各分支可以是目录, 也可以是文件,最后的叶子都是文件。 4.根据学校各级机构,编制一文件系统。

操作系统简单文件系统设计及实现

简单文件系统的设计及实现 一、实验目的: 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) 一台运行Windows 2000 Professional或Windows 2000 Server的操作系统的计算机。 2) 计算机中需安装Visual C++ 6.0专业版或企业版 四、实验要求: (1)按照学校关于实验报告格式的要求,编写实验报告(含流程图); (2)实验时按两人一组进行分组,将本组认为效果较好的程序提交检查。

实验六 文件系统设计结果

实验六文件系统设计 1.目的和要求 本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。 2.实验内容 为DOS系统设计一个简单的二级文件系统,可以实现下列几条命令DIR 列文件目录 CREATE 创建文件 DELETE 删除文件 MODIFY 修改文件 OPEN 打开文件 CLOSE 关闭文件 列目录时要列出文件名,物理地址,保护码和文件长度。 3.实验环境 ①PC兼容机 ②Windows、DOS系统、Turbo c 2.0 ③C语言 4.实验提示 ①首先应确定文件系统的数据结构:主目录、活动文件等。主目录文件的形式存放于磁盘,这样便于查找和修改。 主目录结构: Ufdname 用户名 Ufdfile 指向用户的活动文件 活动文件结构: Fpaddr 文件物理地址 Flength 文件长度 Fmode 文件属性(file mode:0-Read Only;1-Write Only;2-Read and Write(default)) Fname 文件名称 ②用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2…并

以编号作为物理地址,在目录中进行登记。

③本程序需要在c:下建一个名为osfile的目录及一个名为file的子目录,在利用程序创建了文件系统后,可以在这个文件夹下查看到相关的内容。5.实验程序 #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;

(完整版)linux文件系统管理-权限管理实验4报告

实验报告 课程Linux系统应用与开发教程实验名称linux文件系统管理-权限管理(高级设置) 一、实验目的 1、掌握Linux文件系统权限的设置 2、掌握linux用户帐号与组管理 3、掌握linux 文件共享的设置方法 4、掌握linux 文件共享的权限设置方法 二、实验内容 1、使用root帐号通过系统提供的6个虚拟控制台登陆到linux,或在x-windows开启一个终端。 2、完成以下的实验内容 (1)、假设你是系统管理员:现要在公司linux服务器系统中新增一些用户与一个用户组。 ?使用groupadd account 添加一个名为account的组 ?使用useradd -G account acc-user1,(该命令将添加一个用户名为acc-user1的用户, 同时会建立一个与用户名同名的私有组(该私有组为用户的默认组,这个组中只有一个用户名),并把该用户将加入account的标准组,同时,按同样的方法建立acc-user2、acc-user3、acc-user4。 ?建立用户后,请使用x-window中的用户与组管理工具查看用户与组建立情况,检查用户与组的归属情况。 (2)、开启多个控制台,分别使用acc-user1、acc-user2、acc-user3登陆系统(可以在控制台分别登陆,也可以在X-windows中多开几个终端程序,默认使用root登陆,然后使用su命令通过切换用户的方式登陆,其语法为“su - user-name”,提示可以在登陆成功后运行命令“id”查看当前登陆的用户属于哪些组,当前的默认组是什么?) (3)、为account组建立一个公共共享目录/home/account-share,满足以下的权限设定要求,以及设置何种的umask: ?该目录的拥有者为acc-user1,所属组为account。 ?在该目录下建立一个/home/account-share/full-share的子目录,修改该目录的权限,使得account组的成员均能在对该目录有完全控制权限,account组外的其他用户没有任何权限,即account组的成员都可以在该目录下建立文件,同时在该子目录full-share下建立的文件,只有文件建立者有权限删除,并且每个用户在该子目录full-share下建立的文件也能自动与该account组成员可读共享。 ?在/home/account-share/为每个用户建立一个与用户名同名的子目录(如/home/account-share/acc-user1为用户acc-user1的目录,其拥有者为acc-user1,所在的组为account),配置该子目录的拥有者有完全控制权限,而同组用户只能读取,同时在用户在该目录下建立的文件,可供同组用户读。 (4)、考虑完成以上的共享目录权限设置,应注意哪些设置。包括目录的权限,目录的拥有者,目录所在的组,具体文件的权限,umask设置等。 (5)、实验报告应体现出使用不同身份的用户对所配置目录的访问测试过程。 三、实验环境 安装有vmware或visual pc软件的window主机,系统中有提供turbolinux或redhat的硬盘

操作系统实验5文件系统:Linux文件管理

实验5 文件系统:Linux文件管理 1.实验目的 (1)掌握Linux提供的文件系统调用的使用方法; (2)熟悉文件和目录操作的系统调用用户接口; (3)了解操作系统文件系统的工作原理和工作方式。 2.实验内容 (1)利用Linux有关系统调用函数编写一个文件工具filetools,要求具有下列功能:*********** 0. 退出 1. 创建新文件 2. 写文件 3. 读文件 4. 复制文件 5. 修改文件权限 6. 查看文件权限 7. 创建子目录 8. 删除子目录 9. 改变当前目录到指定目录 10. 链接操作 *********** 代码: #include #include #include #include #include #include #include #include void menu(void); void openfile(void); void writefile(void); void readfile(void); void copyfile(void); void chmd(void); void ckqx(void); void cjml(void); void scml(void); void ggml(void); void ylj(void); int main() { int choose; int suliangjin=1;

menu(); scanf("%d",&choose); while(choose!=0) { switch(choose) { case 1:openfile();break; case 2:writefile();break; case 3:readfile();break; case 4:copyfile();break; case 5:chmd();break; case 6:ckqx();break; case 7:cjml();break; case 8:scml();break; case 9:ggml();break; case 10:ylj();break; } menu(); scanf("%d",&choose); } return 0; } void menu(void) { printf("文件系统\n"); printf("1.创建新文件\n"); printf("2.写文件\n"); printf("3.读文件\n"); printf("4.复制文件\n"); printf("5.修改文件权限\n"); printf("6.查看文件权限\n"); printf("7.创建子目录\n"); printf("8.删除子目录\n"); printf("9.改变目前目录到指定目录\n"); printf("10.链接操作\n"); printf("0.退出\n"); printf("请输入您的选择...\n"); } void openfile(void) { int fd; if((fd=open("/tmp/hello.c",O_CREAT|O_TRUNC|O_RDWR,0666))<0) perror("open");

实验四 文件系统实验

实验四文件系统实验 一 . 目的要求 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个文件操作命令,并加以实现。(如移动读写指针,改变文件属 性,更换文件名,改变文件保护级别)。 #include #include #include #define getpch(type) (type*)malloc(sizeof(type)) int userNum=0; struct mdf {

实验4 文件操作

齐鲁工业大学实验报告成绩 一、实验目的及要求 1.熟悉Linux下常用的操作指令。 2.加深对文件,目录,文件系统等概念的理解。 3.掌握Linux文件系统的目录结构。 4.掌握有关Linux文件系统操作的常用命令。 5.了解有关文件安全方面的知识。 二、实验过程及结果 1.浏览文件系统 〈1〉运行pwd命令,确定你当前的工作目录。 〈2〉利用以下命令显示当前工作目录的内容:(理解各字段彻底意义。) 〈3〉运行以下命令:(反馈信息中.代表本身目录,..代表其父目录;选项a可以显示隐藏文件;选项i可以显示文件的I节点号) ls –ai 〈4〉使用mkdir命令建立一个子目录subdir,并用ls查看当前目录。 〈5〉使用带-d选项的ls命令,你只能看到有关子目录的信息(.表示本身目录)。 〈6〉使用cd命令,将工作目录改到根目录(/)上。 ①用相对路径将工作目录改到根目录。 ②用绝对路径将工作目录改到根目录。

2.查看你的文件 〈1〉利用cd命令,将工作目录改到你的主目录上。 〈2〉将工作目录改到你的子目录subdir,然后运行命令: date > file1 将当前日期和时间存放到新建文件file1中。 Ls –l 反馈信息中有新文件 file1。 〈3〉使用cat命令查看file1文件的内容。 〈4〉利用man命令显示date命令的用法(说明文件): 〈5〉将date命令的用法(说明文件内容)附加到文件file1的后面: 3.文件存取权限 mv file_a file1 恢复文件file1; ls –l 显示文件file1的权限为 rw-rw-r—; 1).取消同组用户g和其他用户o 对文件可读的权利; 2).显示文件file1的权限。 3).恢复同组用户g和其他用户o 对文件可读的权利;

Linux文件系统实验

实验编号与实验名称: 文件系统实验 实验目的: 熟悉文件和目录的基本操作;了解Linux的/proc文件系统 实验内容及要求(详见实验讲义与实验指导书): 内容: 1)在/usr目录下创建一个目录usr_test和文本文件test,并建立一个test文件的链接 test02。通过修改test文件中的内容查看test和test02中内容的情况,并分析原因。 2)编写程序,从/proc文件中抽取内核参数(任意的2个参数即可,如CPU时钟速度信 息等) 3)实现文件的拷贝,即把一个文件内容复制到另一个文件 要求: 对于内容1),给出操作步骤和结果分析,需回顾第二次实验中练习过的Shell命令和教材中的文件和目录操作系统调用 对于内容2)和3)给出完整C语言代码或者代码截图和代码执行结果,可参考本文件“实验预读”中相关内容和教材P.149/266图4-5相关代码 实验用到的软件(:) VMware 实验内容及关键步骤(代码)Q2(60分) 1)在/usr目录下创建一个目录usr_test和文本文件test,并建立一个test文件的链接 test02。通过修改test文件中的内容查看test和test02中内容的情况,并分析原因。

分析:在linux系统中通过link连接就可以通过第三方的查询,通过link函数后test01被绑定给test02中,所以可以通过test02去查询。 2.编写程序,从/proc文件中抽取内核参数(任意的2个参数即可,如CPU时钟速度信息等)

3.实现文件的拷贝,即把一个文件内容复制到另一个文件

实验过程中遇到的问题解决办法与实验体会Q3(10分)得分: 评阅教师特殊评语: 评阅教师: 日期:

操作系统实验---文件系统

实验报告 实验题目:文件系统 姓名: 学号: 课程名称:操作系统 所在学院:信息科学与工程学院 专业班级:计算机 任课教师:

实验项目名称文件系统 一、实验目的与要求: 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命令,回车,输入文件名,回车,即会在当前目录文件下删除一个名为刚刚输入的文件名的数据文件。在该删除过程中要判断该目录中是否存在该文件,如果不存在就没有必要执行该操作了,还要判断在该目录下有没有删除文件的权限,有权限才可以删除。具体流程图查看第二节,系统流程图设计部分。 ◆ls 显示当前目录下所有目录的模块,输入 ls 命令,回车 ,即会在屏幕上显示当前目录下的所有目录。在该过程中要判断该目录中是否为空,如果为空就没有必要执行该操作了。执行操作时,要调用 readdir (INode inode )函数 ,先读入文件内容到 content 里面,然后直接输出。如果子目录里面还有子目录,则通过递归,一并输出来。具体流程图查看第二节,系统流程图设计部分。 ◆chmod 改变文件权限模块,输入 chmod 命令,回车,输入文件名,回车,即会根据不同类别的用户在屏幕上提示要改变哪一类用户的权限。如果是文件拥有者执行该操作,他可以选择修改自己、其他用户的权限;如果是文件所属组成员执行该操作,他可以选择修改自己、其他用户的权限;如果是其他用户执行该操作,他只能选择修改自己的权限;在该过程中要判断该目录中是否存在该文件,如果不存在就没有必要执行该操作了。执行操作时,要判断对该文件有没有执行写操作的权利,没有就不能进行。具体流程图查看第二节,系统流程图设计部分。 ◆cd 改变当前所在目录的模块。输入 cd,回车,相应的字符串,回车,则会根据输入字符串的不同跳转到不同的目录下。如果字符串是‘ .’ ,则到当前目录;如果字符串是‘ ..’ ,则到父目录;如果字符串是‘/’ ,则到根目录;如果字符串是当前目录下的子目录,则到该子目录;如果字符串是一个决定路径,则到该绝对路径。当然在执行的时候要判断有没有该子目录或者该绝对路径,如果没有的话,就不能执行。具体流程图查看第二节,系统流程图设计部分。 2. 用户操作 ◆login 用户注销模块,输入 login ,回车,当前用户就退出了,需要重新登录。 ◆pw 用户修改口令模块,输入 pw ,回车,则会提示输入原始密码,输入正确了才可以提示输入新密码,并且要求新密码输入两次,两次一样了才能通过修改密码成功。具体流程图查看第二节,系统流程图设计部分。 ◆logout 用户退出系统模块,输入 logout ,回车,系统自动退出。

文件系统实验报告

实验二文件系统实验报告

一.实验简介 本实验要求在假设的I/O 系统之上开发一个简单的文件系统,这样做既能让实验者对文件系统有整体了解,又避免了涉及过多细节。用户通过create, open, read 等命令与文件系统交互。文件系统把磁盘视为顺序编号的逻辑块序列,逻辑块的编号为0 至L-1。I/O 系统利用内存中的数组模拟磁盘。 实际物理磁盘的结构是多维的:有柱面、磁道、扇区等概念。I/O 系统的任务是隐藏磁盘的结构细节,把磁盘以逻辑块的面目呈现给文件系统。逻辑块顺序编号,编号取值范围为0 至L .. 1,其中L 表示磁盘的存储块总数。实验中,我们可以利用字符数组ldisk[L][B] 构建磁盘模型,其中 B 表示每个存储块的长度。I/O 系统从文件系统接收命令,根据命令指定的逻辑块号把磁盘块的内容读入命令指定的内存区域,或者把命令指定的内存区域内容写入磁盘块。 我设计的文件系统拥有三个用户。 二.具体说明 1.文件系统的组织:磁盘的前k 个块是保留区,其中包含如下信息:位图和文件描述符。位图用来描述磁盘块的分配情况。位图中的每一位对应一个逻辑块。创建或者删除文件,以及文件的长度发生变化时,文件系统都需要进行位图操作。前k 个块的剩余部分包含一组文件描述符。每个文件描述符包含如下信息: ?文件长度,单位字节 ?文件分配到的磁盘块号数组。该数组的长度是一个系统参数。在实验中我们可以把它设置为一个比较小的数,例如3。 2.目录:我们的文件系统中仅设置一个目录,该目录包含文件系统中的所有文件。除了不需要显示地创建和删除之外,目录在很多方面和普通文件相像。目录对应0 号文件描述符。初始状态下,目录中没有文件,所有,目录对应的描述符中记录的长度应为0,而且也没有分配磁盘块。每创建一个文件,目录文件的长度便增加一分。目录文件的内容由一系列的目录项组成,其中每个目录项由如下内容组成: ?文件名 ?文件描述符序号 3.对文件的操作: 文件系统需提供如下函数;create, destroy, open, read, write。 ?create(filename): 根据指定的文件名创建新文件。 ?destroy(filename): 删除指定文件。 ?open(filename): 打开文件。该函数返回的索引号可用于后续的read, write, lseek, 或close 操作。 ?close(index): 关闭制定文件。 ?read(index, mem_area, count): 从指定文件顺序读入count 个字节mem_area 指定的内存位

实验5添加一个文件系统

实验5 添加一个文件系统 实验目的 文件系统是操作系统中最直观的部分,因为用户可以通过文件直接地和操作系统交互,操作系统也必须为用户提供数据计算、数据存储的功能。本实验通过添加一个文件系统,进一步理解Linux中的文件系统原理及其实现。 深入理解操作系统文件系统原理 学习理解Linux的VFS文件系统管理技术 学习理解Linux的ext2文件系统实现技术 设计和实现自定义文件系统 实验内容 添加一个类似于ext2的自定义文件系统myext2。实验主要内容: 添加一个和ext2完全相同的文件系统myext2 修改myext2的magic number 修改文件系统操作 添加文件系统创建工具 实验指导 1. 问题描述

本实验的内容是要添加一个类似于ext2的自定义文件系统myext2。myext2文件系统的描述如下: 1、myext2文件系统的物理格式定义与ext2基本一致,除了myext2的magic number 是0x6666,而ext2的magic number是0xEF53。 2、myext2是ext2的定制版本,它只支持原来ext2文件系统的部分操作,以及修改了部分操作。 2. 实验步骤 提示:下面的操作步骤以3.6.6版本的内核为例,2.6.15版本的内核请参照教材,其它版本内核可能会有所区别。 2.1 添加一个和ext2完全相同的文件系统myext2 要添加一个与ext2完全相同的文件系统myext2,首先是确定实现ext2文件系统的内核源码是由哪些文件组成。Linux源代码结构很清楚地告诉我们:fs/ext2目录下的所有文件是属于ext2文件系统的。再检查一下这些文件所包含的头文件,可以初步总结出来Linux 源代码中属于ext2文件系统的有: fs/ext2/acl.c fs/ext2/acl.h fs/ext2/balloc.c fs/ext2/bitmap.c fs/ext2/dir.c

实验二--文件系统及磁盘管理

实验二文件系统及磁盘管理 1.文件系统管理 一、实验目的 ●掌握Linux下文件系统的创建、挂载与卸载。 ●掌握文件系统的自动挂载。 二、项目背景 某企业的Linux服务器中新增了一块硬盘/dev/sdb,请使用fdisk命令新建/dev/sdb1主分区和/dev/sdb2扩展分区,并在扩展分区中新建逻辑分区/dev/sdb5,并使用mkfs命令分别创建vfat和ext3文件系统。然后用fsck命令检查这两个文件系统;最后,把这两个文件系统挂载到系统上。 三、实验内容 练习Linux系统下文件系统的创建、挂载与卸载及自动挂载的实现。 四、实验步骤 子项目1.创建/dev/sdb1和/dev/sdb5 ●使用fdisk命令创建/dev/sdb1主分区。 ●使用fdisk命令创建/dev/sdb2扩展分区。

●使用fdisk命令创建/dev/sdb5逻辑分区。 ●输入子命令w,把设置写入硬盘分区表,退出fdisk并重新启动系统。 ●用mkfs命令在上述刚刚创建的分区上创建ext3文件系统和vfat文件系统。 ●用fsck命令检查上面创建的文件系统。 子项目2.挂载/dev/sdb1和/dev/sdb5 ●利用mkdir命令,在/mnt目录下建立挂载点,mountpoint1和mountpoint2。 ●把上述新创建的ext3分区挂载到/mnt/mountpoint1上。

●把上述新创建的vfat分区挂载到/mnt/mountpoint2上。 ●利用mount命令列出挂载到系统上的分区,查看挂载是否成功。 ●利用umount命令卸载上面的两个分区。 子项目3.实现/dev/sdb1和/dev/sdb5的自动挂载 ●编辑系统文件/etc/fstab文件,把上面两个分区加入此文件中。 ●重新启动系统,显示已经挂载到系统上的分区,检查设置是否成功。 子项目4.挂载光盘和U盘 ●取一张光盘放入光驱中,将光盘挂载到/media/cdrom目录下。查看光盘中的文件。 ●利用与上述相似的命令完成U盘的挂载与卸载。 五、实验思考题 1. 在Linux下能创建Windows 的分区吗?在Linux下能创建Windows的文件系统吗? Windows操作系统可以识别ext3文件系统吗? 2.系统挂装表的文件名?系统挂装表的作用是什么?其文件格式使什么? 3.利用mount命令挂装一个文件系统和将其写入/etc/fstab文件的区别是什么?

实验4(文件系统)

实验4 文件系统 一、目的与要求 1. 目的 文件系统是操作系统的一个重要组成部分,也是与用户关系极为密切的部分。学生应独立的用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作命令的实质内容和执行过程有比较深入的了解,掌握它们的实施方法,加深对教材中有关内容的理解。 2. 要求 (1)设计一个n个用户的文件系统,每个用户最多可保存m个文件。 (2)限制用户在一次运行中只能打开一个文件。 (3)系统应能检查输入命令的正确性,出错时要能显示出错原因。 (4)对文件必须设置保护措施,如只能执行,允许读,允许写等。在每次打开文件时,根据本次打开的要求,再次设置保护级别,即可有二级保护。 (5)对文件的操作至少应有下面几条命令: create 建立文件 delete 删除文件 open 打开文件 close 关闭文件 read 读文件 write 写文件 (6)本次实验的上机时间为2~4学时。 二、实验内容 1. 题目 (1)本次实验设计一个共有10个用户的文件系统,每个用户最多可保存10个文件,一次运行过程中用户可同时打开5个文件。 (2)程序采用二级文件目录,即设置了主文件目录(MFD)和用户文件目录(UFD)。前者应包含文件主(即用户)及他们的目录区指针;后者应给出每个文件主占有的文件目录,即文件名、保护码、文件长度以及它们存放的位置等。另外为打开文件设置了运行文件目录(AFD),在文件打开时应填入打开文件号,本次打开保护码和读写指针等。 (3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只修改读写指针,并不进行实际文件的读写操作。 2. 算法与框图

操作系统实验-文件系统设计

文件系统设计 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.0 4.实验提示 1) format 格式化

只写打开模拟文件,初始化超级快,初始化dinode 位图 block 位图,初始化主目录,初始化etc 目录,初始化管理员admin 目录,初始化用户xiao 目录,初始化 用户passwd 文件,写入模拟硬盘文件。 2 )install 安装 读写打开模拟文件,读取dinode 位图 block 位图,读取主目录,读取etc 目录,读取管理员admin 目录,读取用户xiao 目录,读取 用户passwd 文件。 3 )login 登陆 用户输入用户名和密码,在passwd 文件中查找是否有此用户,核对密码。正确则登陆成功,当前目录设定到当前用户文件夹下。 Login 登录 结束是,登录成功 输入用户名 查找是否有改 用户名 输入密码是 否 密码是否正确 否 4 )ialloc 申请inode 空间 先检测inode 位图是否加锁,是则退出。加锁,检测inode 空间是否还有已满,是则退出。在inode 位图中顺序查找空闲的inode ,找到则返回inode 地址,block 解锁。函数结束。

实验 文件系统管理

实训项目4 文件系统管理 一、实训目的 ●掌握Linux下文件系统的创建、挂载与卸载。 ●掌握文件系统的自动挂载。 二、项目背景 某企业的Linux服务器中新增了一块硬盘/dev/sdb,请使用fdisk命令新建/dev/sdb1主分区和/dev/sdb2扩展分区,并在扩展分区中新建逻辑分区/dev/sdb5,并使用mkfs命令分别创建vfat和ext3文件系统。然后用fsck命令检查这两个文件系统;最后,把这两个文件系统挂载到系统上。 三、实训内容 练习Linux系统下文件系统的创建、挂载与卸载及自动挂载的实现。 四、实训步骤 子项目1.创建/dev/sdb1和/dev/sdb5 ●使用fdisk命令创建/dev/sdb1主分区。 ●使用fdisk命令创建/dev/sdb2扩展分区。

●使用fdisk命令创建/dev/sdb5逻辑分区。 ●输入子命令w,把设置写入硬盘分区表,退出fdisk并重新启动系统。 ●用mkfs命令在上述刚刚创建的分区上创建ext3文件系统和vfat文件系统。 ●用fsck命令检查上面创建的文件系统。 子项目2.挂载/dev/sdb1和/dev/sdb5 ●利用mkdir命令,在/mnt目录下建立挂载点,mountpoint1和mountpoint2。

●把上述新创建的ext3分区挂载到/mnt/mountpoint1上。 ●把上述新创建的vfat分区挂载到/mnt/mountpoint2上。 ●利用mount命令列出挂载到系统上的分区,查看挂载是否成功。 ●利用umount命令卸载上面的两个分区。 子项目3.实现/dev/sdb1和/dev/sdb5的自动挂载 ●编辑系统文件/etc/fstab文件,把上面两个分区加入此文件中。 ●重新启动系统,显示已经挂载到系统上的分区,检查设置是否成功。 子项目4.挂载光盘和U盘 ●取一张光盘放入光驱中,将光盘挂载到/media/cdrom目录下。查看光盘中的文件。 ●利用与上述相似的命令完成U盘的挂载与卸载。 五、实训思考题 1. 在Linux下能创建Windows 的分区吗?在Linux下能创建Windows的文件系统吗?Windows操作

操作系统实验报告-实验四

操作系统实验报告-实验四

实验四:进程管理(二) 实验内容: 1.编写一个程序,打印进程的如下信息:进程标识符,父进程标识符,真实用户ID,有效用户ID,真实用户组ID,有效用户组ID。并分析真实用户ID和有效用户ID的区别。 源代码及结果: 真实用户ID和有效用户ID的区别: 真实用户ID:这个ID就是我们登陆unix 系统时的身份ID。 有效用户ID:定义了操作者的权限。有效用户ID是进程的属性,决定了该进程对文件的访问权限。 2.阅读如下程序,编译并运行,分析进程执行过程的时间消耗(总共消耗的时间和CPU

消耗的时间),并解释执行结果。再编写一个计算密集型的程序替代grep,比较两次时间的花销。注释程序主要语句。 /* process using time */ #include #include #include #include #include void time_print(char *,clock_t); int main(void){ //取得进程运行相关的时间 clock_t start,end; struct tms t_start,t_end; start = times(&t_start); system(“grep the /usr/doc/*/* > /dev/null 2> /dev/null”); /*command >/dev/null的作用是将是command命令的标准输出丢弃,而标准错误输出还是在屏幕上。一般来讲标准输出和标准

操作系统--实验六-文件系统设计试验

操作系统--实验六-文件系统设计试验

实验目的与要求: 通过设计一个基于索引结构的文件系统,加深对文件系统的基本知识理解。了解文件系统设计的基本概念。 (1)熟悉文件系统的物理结构; (2)熟悉文件系统的目录管理; (3)掌握文件系统空闲空间管理的基本方法; (4)进一步理解现代操作系统文件管理知识。 实验设备(环境): (1)一台安装有Cygwin Terminal的计算机 (2) Windows XP操作系统 (3)VC++6.0 实验内容: (1)熟悉文件系统的物理结构; (2)熟悉文件系统的目录管理; (3)掌握文件系统空闲空间管理的基本方法; (4)进一步理解现代操作系统文件管理知识。 实验步骤、实验结果及分析: (1) 设计一个文件系统的索引结构,描述逻辑结构与物理索引结构之间的关系; (2) 设计文件目录,描述文件名与文件物理结构之中的映射关系; (3) 定义作业; (4) 设计文件建立; (5)设计文件系统的其它功能;

实验结论: 试验运行结果: 图1程序运行结果 4、思考 该试验中,从功能能上讲,根据所学的文件系统管理方面知识,你所设计的(模拟)文件还有那些没有实现: 对以后设计的修改建议: 目前所做的修改及实际结果如下: 程序清单: #include "stdio.h" #include "stdlib.h" //文件索引表的定义 struct index{ int lr[32]; int pr[32];

char st[32]; }*wq; #define JOBN 20 //文件目录的定义 struct list{ char names[32]; int size[32]; struct index*p[32];//文件的索引表地址}*HEAD; //作业序列 struct que{ char name; int size; }job[JOBN]; int i,j,ly,li; char bb;

实验四_文件系统实验

实验四文件系统实验 一 .目的要求 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个文件操作命令,并加以实现。(如移动读写指针,改变文件属性,更换文件名,改变文件保护级别)。 #include #include #include 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;

相关主题