操作系统 - 文件管理实验(文件系统)
文件管理实验(文件系统)
·
用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。
要求设计一个 n 个用户的文件系统,每次用户可保存 m 个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少Create、delete、open、close、read、write 等命令。
#include <cstdio>
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int MFD_NUM = 10;
struct FI
{
char uid;
int fid;
char name[50];
char status[50];
string item;
int cursor;
};
vector<FI> FV[MFD_NUM];
char mfd[MFD_NUM] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'};
void p_userinfo()
{ // 输出用户
printf("用户:\n1、A\t2、B\n3、C\t4、D\n5、E\t6、F\n7、G\t8、H\n9、I\t10、J\n");
}
void p_userfd(int id)
{ // 输出用户文件夹目录
printf("该用户的文件目录为:\n");
for (int i = 0; i < FV[id].size(); ++i)
{
printf("%d、\t文件名:%s \t文件fid:%d \t文件状态:%s\n", i + 1, FV[id][i].name, FV[id][i].fid, FV[id][i].status);
}
printf("\n");
}
void p_instructions()
{ // 输出指令集
printf("指令集:\n1、创建新文件\t2、删除文件\n3、打开文件\t4、关闭文件\n5、读出文件\t6、写入文件\n7、查看文件目录\t8、更换文件名\n9、更改文件所属\t10、注销账户\n");
}
void Creat(int id)
{
if (FV[id].size() < 10)
{
FI fi;
printf("请输入新建的文件名:\n");
scanf("%s", fi.name);
fi.fid = FV[id].size() + 1;
fi.uid = id + 'A';
memset(fi.status, '\0', sizeof(fi.status));
strcpy(fi.status, "close");
FV[id].push_back(fi);
}
else
{
printf("最多只能创建10个文件!\n");
}
}
void Delete(int id)
{
printf("请输入你需要删除文件的fid:\n");
int fid;
scanf("%d", &fid);
for (int i = 0; i < FV[id].size(); ++i)
{
if (FV[id][i].fid == fid)
{
FV[id].erase(FV[id].begin() + i);
break;
}
}
printf("已删除\n");
}
void Open(int id)
{
printf("请输入你需要打开文件的fid:\n");
int fid;
scanf("%d", &fid);
for (int i = 0; i < FV[id].size(); ++i)
{
if (FV[id][i].fid == fid)
{
strcpy(FV[id][i].status, "open");
break;
}
}
printf("已打开\n");
}
void Close(int id)
{
printf("请输入你需要关闭文件的fid:\n");
int fid;
scanf("%d", &fid);
for (int i = 0; i < FV[id].size(); ++i)
{
if (FV[id][i].fid == fid)
{
strcpy(FV[id][i].status, "close");
break;
}
}
printf("已关闭\n");
}
void Read(int id)
{
printf("请输入你需要读取文件的fid:\n");
int fid;
scanf("%d", &fid);
for (int i = 0; i < FV[id].size(); ++i)
{
if (FV[id][i].fid == fid)
{
cout << FV[id][i].item << endl;
strcpy(FV[id][i].status, "read");
break;
}
}
printf("已读取\n");
}
void Write(int id)
{
printf("请输入你需要写入文件的fid:\n");
int fid;
scanf("%d", &fid);
for (int i = 0; i < FV[id].size(); ++i)
{
if (FV[id][i].fid == fid)
{
printf("是否从上次光标位置开始输入?是请按 y/Y,否请按其它键\n");
char judge = ' ';
while (judge == ' ' || judge == '\n')
{
judge = getchar();
}
getchar();
if (judge == 'y' || judge == 'Y')
{
cout << "请输入希望写入的内容(请以'#'结束):" << endl;
string temp;
char t;
while (t != '#')
{
t = getchar();
if (t != '#')
temp = temp + t;
}
FV[id][i].item = FV[id][i].item + temp;
FV[id][i].cursor = FV[id][i].item.size() - 1;
}
else
{
int c = 0;
cout << "请输入希望写入的光标位置:" << endl;
cin >> c;
cout << "请输入希望写入的内容:" << endl;
string temp;
char t;
while (t != '#')
{
t = getchar();
if (t != '#')
temp = temp + t;
}
FV[id][i].item.insert(c, temp);
FV[id][i].cursor = FV[id][i].item.size() - 1;
}
strcpy(FV[id][i].status, "write");
break;
}
}
printf("已写入\n");
}
void Rename(int id)
{
printf("请输入你需要重命名文件的fid:\n");
int fid;
scanf("%d", &fid);
for (int i = 0; i < FV[id].size(); ++i)
{
if (FV[id][i].fid == fid)
{
cout << "当前文件名为:" << FV[id][i].name << endl;
cout << "你希望重命名为:" << endl;
char temp[50];
cin >> temp;
strcpy(FV[id][i].name, temp);
break;
}
}
printf("已更改\n");
}
void change_owner(int id)
{
printf("请输入你需要更改所属文件的fid:\n");
int fid;
scanf("%d", &fid);
for (int i = 0; i < FV[id].size(); ++i)
{
if (FV[id][i].fid == fid)
{
cout << "当前文件名所属为:" << FV[id][i].uid << endl;
cout << "你希望更改为:" << endl;
char temp;
cin >> temp;
FV[id][i].uid = temp;
FV[temp - 'A'].push_back(FV[id][i]);
FV[id].erase(FV[id].begin() + i);
break;
}
}
printf("已更改\n");
}
int main()
{
printf("实验四 高级语言编写和调试一个简单的文件系统。\n\n");
while (1)
{
p_userinfo();
char option;
printf("请输入用户名以进入UFD:\n");
scanf("%c", &option);
getchar();
if (option - 'A' < MFD_NUM && option - 'A' >= 0)
{
int id = option - 'A';
p_userfd(id);
p_instructions();
int op = -1;
while (op != 10)
{
printf("请输入指令序号:\n");
scanf("%d", &op);
if (op == 1)
{
Creat(id);
}
else if (op == 2)
{
Delete(id);
}
else if (op == 3)
{
Open(id);
}
else if (op == 4)
{
Close(id);
}
else if (op == 5)
{
Read(id);
}
else if (op == 6)
{
Write(id);
}
else if (op == 7)
{
p_userfd(id);
}
else if (op == 8)
{
Rename(id);
}
else if (op == 9)
{
change_owner(id);
}
}
}
else
{
cout << "输入错误!请检查后重新输入!" << endl;
}
char judge = ' ';
printf("您是否希望退出系统?是请按 y/Y,否请按其它键\n");
while (judge == ' ' || judge == '\n')
{
judge = getchar();
}
getchar();
if (judge == 'y' || judge == 'Y')
{
break;
}
}
return 0;
}
更多推荐
已为社区贡献1条内容
所有评论(0)