操作系统二级文件管理课程设计

  • 格式:doc
  • 大小:80.00 KB
  • 文档页数:13

下载文档原格式

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

操作系统二级文件管理课程设计

课程设计名称:二级文件管理系统

专业班级:软件工程计083-1

学生姓名:李晓斌

学号: 20082553103

指导教师:任满杰

设计目的:通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。

设计内容:为Linux系统设计一个简单二级文件管理系统

一、实验内容描述

1 实验目标

本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现.

2 实验要求

为linux系统设计一个简单的二级文件系统.要求做到以下几点:

①可以实现下列命令:

login 用户登录

dir 列文件目录

create 创建文件

delete 删除文件

open 打开文件

close 关闭文件

read 读文件

write 写文件

②列目录时要列出文件名、物理地址、保护码和文件长度.

③源文件可以进行读写保护.

程序设计

(1)设计思想

本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户账号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管理文件与设备文件等特殊内容。

(2)主要数据结构

A 磁盘块结构体:

typedef struct distTable

{

int maxlength;

int start;

int useFlag;

distTable *next;

}diskNode;

diskNode *diskHead;

B 文件块结构体:

struct fileTable //文件块结构体

{

char fileName[10];

int strat; //文件在磁盘存储空间的起始地址

int length; //文件内容长度

int maxlength; //文件的最大长度

char fileKind[3]; //文件的属性——读写方式

struct tm *timeinfo;

bool openFlag; //判断是否有进程打开了该文件

//fileTable *next;

};

C 两级目录结构体

typedef struct user_file_directory //用户文件目录文件UFD

{

//char fileName[10];

fileTable *file;

user_file_directory *next;

}UFD;

//UFD *headFile;

typedef struct master_file_directory //主文件目录MFD

{

char userName[10];

char password[10];

UFD *user;

}MFD;

(3)函数如下;

void userCreate()

{

char c;

char userName[10];

int i;

if(used

{

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

for(i=0;c=getch();i++)

{

if(c==13) break;

else

userName[i]=c;

printf("%c",c);

}

userName[i]='\0';

for(i=0;i

{

if(!strcmp(userTable[i].userName,userName)) {

printf("\n");

printf("该用户名已存在,创建用户失败\n"); system("pause");

return;

}

}

strcpy(userTable[used].userName,userName);

printf("\n");

printf("请输入密码:");

for(i=0;c=getch();i++)

{

if(c==13) break;

else

userTable[used].password[i]=c;

printf("*");

}

userTable[userID].password[i]='\0';

printf("\n");

printf("创建用户成功\n");

used++;

system("pause");

}

else

{

printf("创建用户失败,用户已达到上限\n");

system("pause");

}

fflush(stdin); //清除文件缓冲区

}

int login()

{

char name[10],psw[10];

char c;

int i,times;

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

for(i=0;c=getch();i++)

{

if(c==13) break;

else

name[i]=c;

printf("%c",c);

}

name[i]='\0';

for(i=0;i

{

if(!strcmp(userTable[i].userName,name))

break;

}

if(i==used)

{

printf("\n您输入的用户名不存在\n");

system("pause");

return -1;

}

for(times=0;times<3;times++)

{

memset(psw,'\0',sizeof(psw)); //将psw数组内的内容设置为空

printf("\n请输入密码:");

for(i=0;c=getch();i++)

{

if(c==13) break;

else

psw[i]=c;

printf("*");

}

printf("\n");

for(i=0;i

{

if(!strcmp(psw,userTable[i].password))

{

printf("用户登录成功\n");

system("pause");

break;

}

}

if(i==used)

{