陈泳鑫3110006379操作系统实验报告(8)

2018-12-24 12:38

六、思考题

1、文件系统要解决哪些问题?

答:通过文件系统来组织和管理在计算机中所存储的大量程序和数据;或者说,文件系统的管理功能,是通过把它所管理的程序和数据组织成一系列文件的方法来实现的。 2、什么是文件目录?文件目录中包含哪些信息?目前广泛采用的目录结构形式是哪种? 答:文件目录是一种数据结构,用于标识系统中的文件及其物理地址,供检索时使用。 文件目录中包含文件名和索引结点编号。目前广泛采用的目录结构形式是单级目录结构,双级目录结构,多级目录结构和增加删除目录。

七、源代码

#include #include #include #define NULL 0

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

struct ufd{ /* 第二级:用户文件目录 UFD */ char filename[10]; /* 文件名 */

char procode[3]; /* 保护码 1:读 2:写 3:执行*/ int length; /* 文件长度 */ }*p;

typedef struct ufd UFD;

struct mdf{ /* 第一级:主目录 MDF */ char name[10]; /* 用户名 */

UFD* directory; /* 文件目录指针 */ }maindir[10]; /* 用户数组 */

typedef struct mdf MDF;

struct afd{ /* 文件运行目录 */ char filename[10]; /* 文件名 */

char procode[3]; /* 保护码 1:读 2:写 3:执行*/

int rw; /* 读写指针 初始状态读:0 写:文件长度 */ }afd[5];

int usernum,opennum; /* 登陆用户数量 打开文件数量*/ int filenum[10]; /* 所有的用户目录下的文件数目*/ char username[10]; /* 当前登陆系统的用户名*/

char command[][10]={\ /*文件操作命令*/

void login() /*用户注册,信息写入database文件*/ { int i,j;

FILE *fp; int loginum;

int creatnum[10];

printf(\注册页面=====\\n\\n\ printf(\请输入注册的用户数量:\ scanf(\ for(i=0;i

printf(\请输入第%d个用户名:\ scanf(\ }

for(i=0;i

printf(\请输入%s用户新建文件数(小于10):\ scanf(\ p=getpch(UFD,10); maindir[i].directory=p; for(j=0;j

printf(\请输入新建文件名:\ scanf(\

printf(\请输入要建立的文件的属性(1:读,2:写,3:执行.):\ scanf(\

printf(\请输入要构造的文件的长度:\ scanf(\ } }

fp=fopen(\

fwrite(&loginum,sizeof(int),1,fp); /* 写已注册用户数量到dat文件*/ for(i=0;i

fwrite(maindir[i].name,sizeof(char)*10,1,fp); /* 写已注册用户名到dat文件*/ }

for(i=0;i

{

fwrite(&creatnum[i],sizeof(int),1,fp); /* 写用户新建文件数量到dat文件*/ p=maindir[i].directory; /* UFD获得文件目录指针*/ fwrite(p,sizeof(UFD),10,fp); /* 写用户文件目录指针地址到dat文件*/ }

fclose(fp); printf(\注册完毕=====\\n\ printf(\ system(\ system(\}

void init() /*初始化读入login信息*/ {

int i,j; FILE *fp;

fp=fopen(\ if(fp==NULL) { printf(\警告:根目录不存在记录,请先注册用户\\n\ login(); fp=fopen(\ }

fread(&usernum,sizeof(int),1,fp); /* 读入已注册用户数量*/ for(i=0;i

fread(maindir[i].name,sizeof(char)*10,1,fp); /* 读入已注册用户名*/ p=getpch(UFD,10); maindir[i].directory=p; }

for(i=0;i

fread(&j,sizeof(int),1,fp);

filenum[i]=j; /*读入用户新建文件数量*/ p=maindir[i].directory; /*获得文件目录指针*/

fread(p,sizeof(UFD),10,fp); /*读入用户文件目录指针地址p*/ }

opennum=0; /*运行文件数*/ }

void createfile(int userid) /*新建文件*/ { system(\

char cfilename[10]; int filelen,i; char code[3];

if(filenum[userid]>=10)/*如果用户的文件已有10个*/ {

printf(\用户的文件数量已达到上限,即10个!\\n\ return ; }

printf(\新建文件页面=====\\n\\n\ printf(\请输入要建立的文件名:\ scanf(\

for(i=0;i

if(strcmp((p+i)->filename,cfilename)==0) {

printf(\文件名%s已存在!\\n\ system(\ system(\ return ; } }

printf(\请输入要建立的文件的属性(1:读 2:写 3:执行):\ scanf(\

printf(\请输入要建立的文件的长度:\ scanf(\

strcpy(p[filenum[userid]].filename,cfilename); /*添加新文件名*/ strcpy(p[filenum[userid]].procode,code); /*添加保护码*/ p[filenum[userid]].length=filelen; /*添加文件长度*/ filenum[userid]=filenum[userid]+1; /*更新文件数量*/ printf(\文件建立成功!==\\n\ system(\ system(\}

void deletefile(int userid) /*删除文件*/ { system(\

char dfilename[10]; int i,j; printf(\删除文件页面=====\\n\\n\ printf(\请输入要删除的文件名:\ scanf(\

for(i=0;i

if(strcmp(p[i].filename,dfilename)==0)/*找到要删除的文件*/ {

for(j=i;j

strcpy(p[j].filename,p[j+1].filename); strcpy(p[j].procode,p[j+1].procode); p[j].length=p[j+1].length; if(j==filenum[userid]-1) { strcpy(p[j+1].filename,\ strcpy(p[j+1].filename,\ p[j+1].length=0; free(p+j+1); } }

filenum[userid]--;

printf(\文件删除成功!=====\\n\ system(\ system(\ return ; } }

printf(\找不到要删除的文件!\\n\ system(\ system(\}

void openfile(int userid) /*打开文件*/ { system(\ int i;

char ofilename[10]; printf(\打开文件页面=====\\n\\n\ if(opennum>=5) {

printf(\打开超过5个文件!\\n\ return ; }

printf(\请输入要打开的文件的文件名:\ scanf(\ for(i=0;i

if(strcmp(afd[i].filename,ofilename)==0) /*文件已经打开*/ {

printf(\文件%s已打开!\\n\ return ; } }

for(i=0;i

if(strcmp(p[i].filename,ofilename)==0) /*找到该文件*/ {

strcpy(afd[opennum].filename,ofilename); /*文件运行目录添加打开文件名*/ strcpy(afd[opennum].procode,p[i].procode); /*文件运行目录添加文件保护码*/ afd[opennum].rw=0; /*更新文件运行目录文件读写指针*/

opennum++;

printf(\文件%s已打开!\\n\ printf(\打开文件成功=====\\n\\n\ system(\ system(\ return ; } }

printf(\打不到要文件打开的文件,打开文件失败!\\n\ system(\ system(\}

void closefile() /*关闭文件*/ { system(\ int i,j;

char clfilename[10];

if(opennum==0) /*没有文件被打开过*/ {

printf(\当前还没有打开文件!\\n\


陈泳鑫3110006379操作系统实验报告(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:苏教版小学语文六年级上册教材分析及解读

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: