• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

操作系统 - 文件管理实验文件系统

武飞扬头像
Spikeeee-
帮助1

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

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggefbg
系列文章
更多 icon
同类精品
更多 icon
继续加载