操作系统课程设计

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

课程设计

学生学院计算机学院

专业班级12(1)班

学号3112006351

学生姓名吴炜文

指导教师李敏

2015年 1 月10 日

目录

1 简单文件系统…………………………………………………………

文件系统

一、实验目的:

模拟文件管理的功能,了解各种文件的操作。

二、实验内容:

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

2、程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。另外,为打开文件设置了运行文件目录(AFD)。

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

4、算法与框图:

a、因系统小,文件目录的检索使用了简单的线性搜索。

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

c、程序中使用的主要设计结构如下:

i主文件目录和用户文件目录(MFD、UFD)

ii 打开文件目录(AFD)(即运行文件目录)

要求:用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。

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

文件系统算法的流程图如下:

三、源代码及运行结果:

#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

textattr(BLACK*16|WHITE);

clrscr(); /*clear screen*/

LoginF(); /*user login*/

clrscr();

if(loginsuc==1) /*Login Successfully*/

{while (1)

{wgetchar=0;

if (choiceend==1)

{printf("\n\nC:\\%s>",strupr(dirname));}

else printf("Bad command or file name.\nC:\\%s>",strupr(username));

gets(choice);

strcpy(choice,ltrim(rtrim(strlwr(choice))));

if (strcmp(choice,"dir")==0) choice1=1;

else if(strcmp(choice,"creat")==0) choice1=2;

相关文档
最新文档