简单文件系统的实现(beta1.1)

完善了一下小bug,增加了一点新的功能

1. 支持命令及其实现细节

1.1 cd

  1. 相对路径
  2. 绝对路径

实现细节
(1) 获得cmd中的路径path
(2) 若第一个为”/”,转到绝对路径处理程序,否则转到相对路径处理程序
相对路径处理:
(1) 对path进行解析,如果含有”/”,转到(3),否则,转到(2)
(2) 若为”.”,不做操作;若为”..”,若当前目录是根目录,不做操作,否则转去父节点。都不是,去子目录下找有没有该节点并做相应跳转
(3) 若含有”/”,将”/”之间的所有字符串分离得到几个路径,然后操作同(2)

绝对路径处理:
(1) 将”/”隔开的路径分离,得到每个字符串,从根节点开始做相应跳转,并判断合法性

因此需要保存整个文件系统的根节点

1.2 pwd

显示当前的路径

实现细节
在每次创建新的文件夹时进行pwd拼接

因此每个节点的属性应有pwd

1.3 ls

ls
  1. 子目录
  2. 子文件

实现细节
遍历一遍子节点表和子文件表

ls -l(显示文件的详细信息)
  1. 子目录
  2. 子文件
  3. 所属用户
  4. 创建时间
  5. (文件大小)
  6. (当前用户对文件的权限)

实现细节

在每个节点创建时,应该包含上述属性

ls -a

显示包含隐藏的所有文件和目录(.开头的文件和目录)
Question: 对于隐藏的文件和目录,是保存在原来的表中还是单独新开一个表?

1.4 mkdir

创建一个文件夹

实现细节
创建一个新的节点,更新相应属性和指针

1.5 touch

创建一个文件
实现细节
文件也有各种属性,因此不能用字符串来简单存储,但是不需要指针,因此可以用一个节点来简单存储

1.6 rm

实现细节
(权限系统还没有加入)
我们需要对rm后的字符串进行解析,先获得”rm “后的字符串,如果为:
1. -rf dir,直接删除相应文件夹
2. dir,error:删除的是文件夹,提示使用rm-rf
3. file:从文件表中删除文件

2. 结构体设计

2.1 目录节点的设计

struct dirNode {
    string name;
    string owner; 
    dirNode* pa;
    string group; //所属组
    time_t time; // the time created
    int size; //the size of dir
    int authority[3]; //权限,三位10进制数表示

    //子目录
    set<dirNode> sons;
    map<string, dirNode*> mm; //建立映射关系

    //子文件
    set<fileNode> files;
}

2.2 文件节点的设计

struct fileNode {
    string name;
    string owner;
    string group;
    time_t time;
    int size;
    int authority[3];
}

代码

https://github.com/lzed/OS/blob/master/FileSystem/file.cpp

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值