操作系统实验四 文件系统实验
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
char fileName[20]; char file[200]; struct node *child,*brother; } node,*head; typedef struct node File; void init() { head=getpch(File);
strcpy(head->fileName,"根目录 root"); strcpy(head->file,"root"); head->child=head->brother=NULL; } void insertDep() { File* p; p=getpch(File); printf("请输入目录名称:"); scanf("%s",s); strcpy(p->fileName,s); printf("\n 请输入目录的基本信息:");
西北农林科技大学信息工程学院实习报告
实验四 文件系统实验 一 .目的要求
1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从 而对各种文件操作命令的实质内容和执行过程有比较深入的了解。 2、要求设计一个 n 个用户的文件系统,每次用户可保存 m 个文件,用户在一次 运行中只能打开一个文件,对文件必须设置保护措施,且至少有 Create、delete、 open、close、read、write 等命令。
#include <stdio.h> #include <stdlib.h> #include <string.h> #define getpch(type) (type*)malloc(sizeof(type)) int userNum=0;
struct mdf {
char userName[20]; struct UFD* p; } mdf[20];
} 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) {
if(strcmp(p->fileName,s)==0) p;
p=p->brother; } printf("此文件不存在,请先完善\n"); insertDep(); } return head->child; } void insertMajor() { File *p; printf("请输入该文件所在目录:"); scanf("%s",s); p=haveDep(s); File* t=getpch(File); printf("请输入该文件名称:");
printf("该用户已创建文件:\n"); while(Baidu Nhomakorabeap!=NULL) {
fp=fp->next; printf("%s\n",fp->fileName); } } else { printf("该用户尚未创建任何文件!\n"); } fp= mdf[i].p; Operation(fp); }
3、 设计一个树型目录结构的文件系统,其根目录为 root,各分支可以是目录, 也可以是文件,最后的叶子都是文件。
#include <stdio.h> #include <stdlib.h> #include <string.h> #define getpch(type) (type*)malloc(sizeof(type)) char s[50]; struct node {
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("该用户名下所有文件:\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 请输入文件内容:");
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<userNum; i++) { if(!strcmp(mdf[i].userName,username)) { fp= mdf[i].p; if(fp!=NULL) {
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)
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");
{
printf("请输入文件名:");
scanf("%s",filename); printf("\n 请输入文件内容:"); scanf("%s",file); p=begin->next; while(p!=NULL) {
if(!(strcmp(p->fileName,filename))) {
输入用户名,创建用户名为 2015012860 的新用户,选择创建新文件文件名为 Shiyan4,
选择操作,显示该用户下所有文件 将用户名为 shiyan4 的文件名改为文件名为 caozuoxitong 的文件
用 read 读取文件名为 caozuoxitong 的文件内容 用 delete 删除文件名为 caozuoxitong 的文件。
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;
return
scanf("%s",s); strcpy(t->fileName,s); printf("\n 请输入该文件基本信息:"); scanf("%s",s); strcpy(t->file,s); t->brother=t->child=NULL; if(p->child==NULL) {
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 {
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; }
二 .实验内容
文件系统算法的流程图如下:
三 . 实验题:
1、 增加 2~3 个文件操作命令,并加以实现。(如移动读写指针,改变文件属 性,更换文件名,改变文件保护级别)。
2、 编一个通过屏幕选择命令的文件管理系统,每屏要为用户提供足够的选择信 息,不需要打入冗长的命令 [第一题和第二题表达意思类似,所以合并成一个程序了]
p->child=t; } else {
t->brother=p->child; p->child=t; } } void display() { File *p=head; printf("%s:%s\n",p->fileName,p->file); p=p->child; while(p!=NULL) { printf("目录:\n%s:%s\n",p->fileName,p->file); File *t=p->child; while(t!=NULL) {
{
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;
scanf("%s",s); strcpy(p->file,s); p->brother=p->child=NULL; if(head->child==NULL) {
head->child=p; } else {
p->brother=head->child; head->child=p; } } File* haveDep(char *s) { File *p; p=head->child; if(p==NULL) { printf("无此文件信息,请先完善!\n"); insertDep(); return head->child; } else { while(p!=NULL) {
strcpy(head->fileName,"根目录 root"); strcpy(head->file,"root"); head->child=head->brother=NULL; } void insertDep() { File* p; p=getpch(File); printf("请输入目录名称:"); scanf("%s",s); strcpy(p->fileName,s); printf("\n 请输入目录的基本信息:");
西北农林科技大学信息工程学院实习报告
实验四 文件系统实验 一 .目的要求
1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从 而对各种文件操作命令的实质内容和执行过程有比较深入的了解。 2、要求设计一个 n 个用户的文件系统,每次用户可保存 m 个文件,用户在一次 运行中只能打开一个文件,对文件必须设置保护措施,且至少有 Create、delete、 open、close、read、write 等命令。
#include <stdio.h> #include <stdlib.h> #include <string.h> #define getpch(type) (type*)malloc(sizeof(type)) int userNum=0;
struct mdf {
char userName[20]; struct UFD* p; } mdf[20];
} 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) {
if(strcmp(p->fileName,s)==0) p;
p=p->brother; } printf("此文件不存在,请先完善\n"); insertDep(); } return head->child; } void insertMajor() { File *p; printf("请输入该文件所在目录:"); scanf("%s",s); p=haveDep(s); File* t=getpch(File); printf("请输入该文件名称:");
printf("该用户已创建文件:\n"); while(Baidu Nhomakorabeap!=NULL) {
fp=fp->next; printf("%s\n",fp->fileName); } } else { printf("该用户尚未创建任何文件!\n"); } fp= mdf[i].p; Operation(fp); }
3、 设计一个树型目录结构的文件系统,其根目录为 root,各分支可以是目录, 也可以是文件,最后的叶子都是文件。
#include <stdio.h> #include <stdlib.h> #include <string.h> #define getpch(type) (type*)malloc(sizeof(type)) char s[50]; struct node {
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("该用户名下所有文件:\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 请输入文件内容:");
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<userNum; i++) { if(!strcmp(mdf[i].userName,username)) { fp= mdf[i].p; if(fp!=NULL) {
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)
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");
{
printf("请输入文件名:");
scanf("%s",filename); printf("\n 请输入文件内容:"); scanf("%s",file); p=begin->next; while(p!=NULL) {
if(!(strcmp(p->fileName,filename))) {
输入用户名,创建用户名为 2015012860 的新用户,选择创建新文件文件名为 Shiyan4,
选择操作,显示该用户下所有文件 将用户名为 shiyan4 的文件名改为文件名为 caozuoxitong 的文件
用 read 读取文件名为 caozuoxitong 的文件内容 用 delete 删除文件名为 caozuoxitong 的文件。
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;
return
scanf("%s",s); strcpy(t->fileName,s); printf("\n 请输入该文件基本信息:"); scanf("%s",s); strcpy(t->file,s); t->brother=t->child=NULL; if(p->child==NULL) {
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 {
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; }
二 .实验内容
文件系统算法的流程图如下:
三 . 实验题:
1、 增加 2~3 个文件操作命令,并加以实现。(如移动读写指针,改变文件属 性,更换文件名,改变文件保护级别)。
2、 编一个通过屏幕选择命令的文件管理系统,每屏要为用户提供足够的选择信 息,不需要打入冗长的命令 [第一题和第二题表达意思类似,所以合并成一个程序了]
p->child=t; } else {
t->brother=p->child; p->child=t; } } void display() { File *p=head; printf("%s:%s\n",p->fileName,p->file); p=p->child; while(p!=NULL) { printf("目录:\n%s:%s\n",p->fileName,p->file); File *t=p->child; while(t!=NULL) {
{
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;
scanf("%s",s); strcpy(p->file,s); p->brother=p->child=NULL; if(head->child==NULL) {
head->child=p; } else {
p->brother=head->child; head->child=p; } } File* haveDep(char *s) { File *p; p=head->child; if(p==NULL) { printf("无此文件信息,请先完善!\n"); insertDep(); return head->child; } else { while(p!=NULL) {