操作系统二级文件管理课程设计
- 格式:doc
- 大小:80.00 KB
- 文档页数:13
操作系统二级文件管理课程设计
课程设计名称:二级文件管理系统
专业班级:软件工程计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) {